ここのところJavaScriptを勉強して分かったことですけど、PHPとずいぶん違う部分があります。その一番の違いは、変数のスコープの違いです。以下にソースを示して違いを確認して見ます。
PHPの場合
<?php
$a = "鈴木さん";
function php_display() {
echo $a;
}
php_display();
?>
JavaScriptの場合
<script type="text/javascript">
var b = "山田さん";
function js_display() {
document.write(b);
}
js_display();
</script>
それぞれの実行結果は・・・
PHPの場合の表示
JavaScriptの場合の表示
となり、PHPでは「鈴木さん」は表示されませんが、JavaScriptの場合、「山田さん」は表示されます。PHPでは関数の中から直接グローバルスコープの変数にはアクセスできないが、JavaScriptの場合はそれができる。
PHPで関数の中からグローバルスコープの変数にアクセスするためには・・・
PHPの場合、その2
<?php
$c = "田中さん";
function php_display2() {
echo $GLOBALS['c'];
}
php_display2();
?>
と書いて、$GLOBALS変数でアクセスしてやると・・・・
田中さん
今度は「田中さん」が表示されます。単に、「global $c;」と書いても良いのですが、この書き方はオライリーの本によると推奨されていませんでした。$GLOBALSを用いたほうが良いとのことです。
違いがちゃんとあるんですね
頭パンクしそうです><
PHPの変数のスコープについてはもちろん知ってますが、globalによる宣言が推奨されてないってのは知りませんでした。なんでなんでしょう?
グローバル変数とローカル変数の区別がつけにくいからですかね?
(他の言語では$GLOBALSなんて配列はないので、それらと同様に命名規則で判断できるようにしてす)
■TAKA SEAくん
うん、なんか言語によって違いは色々ありますよ。
Cだと型宣言しないといけないけど、PHP,javascript,PerlとかのLightweight Languageだと型宣言が必要ないとか。
■木田さん
global使う場合は・・・
function php_display2() {
global $hoge;
・・・
echo $hoge;
}
って書いていくんで、関数定義が長くなった場合に、globalで変数にアクセス中であることを忘れてしまう、コードが読みにくくなる、というのが理由でした。
$GLOBALS配列の場合だと・・・
function php_display2() {
echo $GLOBALS['hoge'];
・・・
$hogehoge = $GLOBALS['hoge'];
}
みたいに書くので、$GLOBALSと書くのが面倒くさくはあるけど、コードを見たときにその変数がグローバルスコープのものであるかどうかすぐに見分けがつく、というのが大きな理由だそうです。
やっぱりjavascriptのほうが実用性が高いということね
■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/136