PHPでグローバル変数
かつて書いたPHPのコードが動かないなあ、と悩んでいたが色々調べて解決した。
PHPはバージョン4からクラスの概念が導入されて、バージョン5ではスコープも色々と使えるようになりました(public / protected / private)が、相変わらずグローバル変数を使うことも出来ます。
例えば、あるファイル(aaa.inc)に以下の様に書いておき、
$_VAR['key'] = 'val';
これを別のファイル(bbb.php)から読み込む。bbb.phpではクラスが定義されており、そのメソッドの中で上記のグローバル変数にアクセスする。
require_once("aaa.inc");
class Hoge
{
public function fuga()
{
global $_VAR;
echo $_VAR['key'];
}
}
さて、以前PHP5で上記のコードを開発し実行したのだが、その時はうまく動いていた。PHPの細かなバージョンは覚えていないが。
しかし、久々にPHPの環境を変えてからこれを動かすと、うまく動かない。PHP5の環境は、MacOS XデフォルトからMacPortsの物に変えただけである。
何故だろうと色々と調べていたところ、「PHP5 CLI でのグローバル変数の扱い [PHP Tips]」を発見して、解決方法が分かった。
要するに、この様にスコープを飛び越えてグローバル変数にアクセスしたければ、そもそも変数をグローバル変数だと宣言しなければいけないということなのである。具体的には、上記のaaa.incで、
global $_VAR;
$_VAR['key'] = 'val';
という風に「グローバル変数でございます」と宣言してやれば良いわけだ。試してみたところ、確かにこれで動いた。
いつからこれが必要になったのか、正直良く分かっていない。。。
0 件のコメント:
コメントを投稿