2009年2月9日月曜日

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 件のコメント: