.Water-Sunlight
.サイトメニュー
.検索
.オンライン状況
登録ユーザ: 0
ゲスト: 15
.
<< Prev
変数のスコープ
« INDEX »
PHP 文法編
Next >>
staticキーワード
作成日:2006/05/10

1E.8.4 globalキーワード

 関数の内側でグローバル変数をアクセスする場合は、globalキーワードを使ってグローバル変数を宣言します。 PHPでは、このグローバル変数の宣言は、レファレンスを使って実装されています。次の2つの文は同値です。

global $foo;
$foo =& $GLOBALS['foo']; // lobal $foo;と同値

従って、PHPのglobal宣言とは、「グローバル変数と同じ名前のエイリアスをローカル変数として定義する事」です。 手短に言うと、global宣言とは、「グローバル変数と同名のローカルエイリアスを作る事」です。

PHPでは、グローバル変数とglobal宣言された(ローカル)変数を同一視してはいけません。 混乱はglobal宣言された(ローカル)変数をunset()したり、別のリファレンスに代入したりする場合に起きます。

 global宣言された変数をunset()しても、エイリアス(値と結合している1つのリファレンス)を削除しただけで、 実際の変数は削除されません:

$foo = 'Hello';
foo();       // fooの中で$fooのエイリアスを削除します

echo $foo;   // $fooはまだあります
unset($foo); // $fooを削除します
echo $foo;   // $fooはもうありません

function foo(){
  global $foo;
  echo $foo;  // 'Hello'を出力します
  unset($foo); // $fooのエイリアスを削除します
}

 global宣言された変数を別のリファレンスに代入すると、元の値との結合は無くなり、新しい値と結合します:

$ref = 1;
$var = 2;

global_ref();
echo "$var";  // 3を出力します
echo "$ref";  // 1を出力します(グローバル変数$refは変更していまん)

function global_ref() {

  global $ref;  // $ref =& $GLOBALS["ref"]; と同じ
  global $var;  // $var =& $GLOBALS["var"]; と同じ
  $ref =& $var; // $ref =& $GLOBALS["var"]; と同じ
                // グローバル変数$varのローカルエイリアスは2つあります($varと$ref)
  $ref = 3;
  echo "$ref";  // 3を出力します(ローカル変数$refはグローバル変数$varのエイリアスです)
  echo "$var";  // 3を出力します(ローカル変数$varはグローバル変数$varのエイリアスです)
}

クラスのリファレンスをglobal宣言された変数に代入する場合も、同じ事が起きます。

class bar_class{ var $prop = 1; };

new_bar();
echo $bar->prop;  // なにも出力されません

function new_bar(){
  global $bar;           // $bar =& $GLOBALS["bar"]; と同じ
  $bar =& new bar_class; // $barは$GLOBALS["bar"]のエイリアスでなくなりました
}
<< Prev
変数のスコープ
« INDEX »>
Page Top
Next >>
staticキーワード

.