php globalグローバル変数の概要

1542 ワード

phpの は使いやすいように見えますが、ちょっとした不注意でカバーされやすいです.
たとえば、簡単なphpプロファイルが次のようになります.
$name="Yi_Zhi_Yu";

私たちがこの$nameを使いたいときは、includeを使えばいいことを知っています.そうです.これでいいです.しかし、もし私がこの$nameをグローバル変数として使いたいなら、統一的に修正しやすいですね.
簡単:
include("./config.inc");
global $name;
echo $name; //Yi_Zhi_Yu

では問題です.もしある関数で私がこのグローバル変数を使うなら、あなたはこのように書くかもしれません.
function test()
{
    include("./config.inc"); //        
    global $name;
    var_dump($name);
}
test();

Sorry、あなたはこの変数の価値を得ることができなくて、得たのはnullだけです
これは私が実際に出会った穴です.つまり、 の初期化は でしかできません.私が言った は、関数体やクラスに含まれてはいけないことを意味します.
include("./config.inc"); //          
function test()
{
    global $name; //            
    echo $name; //Yi_Zhi_Yu
}
test();

では、もう一つ質問です.testの中でグローバル属性が定義された変数($age=25と仮定)が、外で値が変更された場合($age=27)、この変数($age)が別の関数で呼び出されます.このときのこの$ageはどの値なのでしょうか.コードは以下のように初期化されたときの値(25)です.それとも外で修正された値(2)なのでしょうか.
function test()
{
    global $age;
    $age=25;
}
function test2()
{
    global $age;
    var_dump($age); //        ?
}

test();
var_dump($age);
$age=27;
test2();

そう、この値は27であるべきです.これがグローバル変数です.ただし、この定義と初期化は1つの関数内で行われます(ただし、この方法は推奨されません.一般的には、私が言ったプロファイルで初期化され、使用時にのみグローバル属性を定義しますが、コードで値を変更することはなく、構成項目として取得されます).