1.global在整個頁面起作用。
例1
| 代碼如下 |
複製代碼 |
global $var1,$var2; |
就是外部變數的同名引用,變數本身的作用範圍仍然在函數體內。改變這些變數的值,外部的同名變數自然也改變。但一旦用了&,那麼變數將不再是同名引用。
| 代碼如下 |
複製代碼 |
<?php $var1 = 1;$var2 = 2; function test(){ global $var1,$var2; // 作用範圍在函數體內 $var1 = 3;} test(); echo $var1; ?> |
結果是 3。
因為是同名引用
在函數體內定義的PHP Global變數,函數體外可以使用,在函數體外定義的global變數不能在函數體內使用,
| 代碼如下 |
複製代碼 |
$glpbal $a; $a=123; function f() { echo $a; //錯誤, } |
再看看下面一例
| 代碼如下 |
複製代碼 |
function f() { global $a; $a=123; } f(); echo $a; //正確,可以使用 |
2.static只在function和class內起作用。
global和$GLOBALS使用基本相同,但在實際開發中大不相同。
global在函數產生一個指向函數外部變數的別名變數,而不是真正的函數外部變數,一但改變了別名變數的指向地址,就會發生一些意料不到情況,
例如例子1.
| 代碼如下 |
複製代碼 |
<?php /* *author:ajax123 *qq:283400245 */ class person{ static$name="ajax123";//static聲明靜態屬性 static$age=25;//static聲明靜態屬性 static$address="北京";//static聲明靜態屬性 function song(){ echo "My name is : ".self::$name."<br>";//類內部:通過通過self 類訪問靜態屬性 echo "I am ".self::$age."<br>";//類內部:通過通過self 類訪問靜態屬性 echo "I live in ".self::$address."<br>";//類內部:通過self 類訪問靜態屬性 } } echoperson::$name."<br>";//類外部:通過類名person訪問靜態屬性 echoperson::$age."<br>";//類外部:通過類名person訪問靜態屬性 echoperson::$address."<br>";//類外部:通過類名person訪問靜態屬性 ?>
|
$GLOBALS[]確確實實調用是外部的變數,函數內外會始終保持一致
Example #1 $GLOBALS 範例
| 代碼如下 |
複製代碼 |
<?php function test() { $foo = "local variable"; echo '$foo in global scope: ' . $GLOBALS["foo"] . "n"; echo '$foo in current scope: ' . $foo . "n"; } $foo = "Example content"; test(); ?> |
以上常式的輸出類似於:
$foo in global scope: Example content
$foo in current scope: local variable