JavaScriptとPHPの変数スコープの違い

はてなブックマークに追加はてなブックマーク Yahoo!ブックマークに登録 ニフティクリップに追加 Livedoor クリップに追加 BuzzurlにブックマークBuzzurlにブックマーク Twitterに投稿  

ここのところ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を用いたほうが良いとのことです。


日時: 2008年04月11日 20:46

コメント (4)

違いがちゃんとあるんですね
頭パンクしそうです><

投稿者: TAKA SEA | 日時: 2008年04月13日 03:18

PHPの変数のスコープについてはもちろん知ってますが、globalによる宣言が推奨されてないってのは知りませんでした。なんでなんでしょう?

グローバル変数とローカル変数の区別がつけにくいからですかね?
(他の言語では$GLOBALSなんて配列はないので、それらと同様に命名規則で判断できるようにしてす)

投稿者: 木田優也 | 日時: 2008年04月15日 08:48

■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と書くのが面倒くさくはあるけど、コードを見たときにその変数がグローバルスコープのものであるかどうかすぐに見分けがつく、というのが大きな理由だそうです。

投稿者: TAKA | 日時: 2008年04月18日 01:55

やっぱりjavascriptのほうが実用性が高いということね

投稿者: じょじょ | 日時: 2008年08月24日 15:35



コメントを投稿






トラックバック

■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/136

この記事にトラックバックされる方は、参照先が分かるようにするために、「JavaScriptとPHPの変数スコープの違い」へのリンクをお願いいたします。
以下のHTMLタグをトラックバック送信元ページ内に挿入して下さい。



※この記事へのリンクがない、また関連のないページからのトラックバックは反映されませんので、ご了承下さい。






あわせて読みたいブログパーツ
フィードメーター - ウェブライフハック