1. 程式人生 > >全域性變數的global的定義和使用

全域性變數的global的定義和使用

  執行程式碼的結果是:my name is why,而不是執行changeName()後顯示what。分析原因,這是因為函式體changeName內$name變數被預設設定為區域性變數,$name的作用域就是在changeName內。於是,修改程式碼,新增全域性變數如下:

複製程式碼
<?php
global $name;
$name = "why";
function changeName(){
    $name = "what";
}
changeName();
echo "my name is " . $name . "<br/>";
?>
複製程式碼

  注意:不能在用global宣告變數的同時給變數賦值。像global $name = "why"的使用方式是錯誤的。

  定義全域性變數後執行的結果仍然為my name is why,這個結果讓我吃驚。原來,global的正確用法是:"在一個函式中引入外部的一個變數,如果該變數沒有通過引數傳遞進來,那麼就通過global引入進來。" 也就是說,當一個函式引用一個外部變數時,可以在函式內通過global來宣告該變數,這樣該變數就可以在函式中使用了(相當於當作引數傳遞進來)。那麼,再次修改程式碼:

複製程式碼
<?php
$name = "why";
function changeName(){
    global $name;
    $name = "what";
}
changeName();
echo "my name is " . $name
. "<br/>"; ?>
複製程式碼

  這次的執行結果是:my name is what,說明global是起傳遞引數的作用,而並非使變數的作用域為全域性。再看下面的例子:

複製程式碼
<?php
$name = "why";
function changeName(){
    global $name;
    $name = "what";
}
function changeName2(){
    $name = "where";
}
changeName();
changeName2();
echo "my name is " . $name . "<br/>";
?>
複製程式碼

  執行結果為:my name is what,如果在changeName2()中新增global $name,執行結果則是:my name is where。

綜上,global的作用就相當於傳遞引數,在函式外部宣告的變數,如果在函式內想要使用,就用global來宣告該變數,這樣就相當於把該變數傳遞進來了,就可以引用該變量了。