T.MURACHIの日記: PHP のスコープ
日記 by
T.MURACHI
スコープの扱いは C と同じっぽい。関数単位ではスコープが別れてくれるんだけど (そして関数内からグローバル変数にアクセスする宣言 global のみが用意されている)、構文上のブロック単位でスコープを分ける手段が用意されていない。だからグローバルスコープ上で for 文なんかを書くと、アタリマエのことだけど、問答無用でグローバルスコープの変数が汚されてしまう。
$ php -r '$i = 999; for ($i = 0; $i < 10; $i++) ; print "$i\n";'
10
C++ や Java ならブロック内で新たに変数を宣言すれば、同じ名前の変数がその外部に既に存在していても、ブロック内ではそのブロックローカルの変数として扱われる。 Perl でさえ、 my で宣言すれば同じことができる。
$ perl -e '$i = 999; for (my $i = 0; $i < 10; $i++) {} print "$i\n"'
999
この辺あんまり気にする人おらんのかなぁー。 ;-(
PHP のスコープ More ログイン