$GLOBALS

$GLOBALS引用全局作用域中可用的全部變量

說明

關(guān)聯(lián)數(shù)組 array,包含當(dāng)前腳本內(nèi)定義成全局范圍的所有變量的引用。 數(shù)組的鍵就是變量的名字。

范例

示例 #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

警告

從 PHP 8.1.0 起,不再支持對(duì)整個(gè) $GLOBALS 數(shù)組的寫訪問:

示例 #2 寫入整個(gè) $GLOBALS 將會(huì)導(dǎo)致錯(cuò)誤。

<?php
 
// 生成編譯時(shí)錯(cuò)誤:
 
$GLOBALS = [];
 
$GLOBALS += [];
 
$GLOBALS =& $x;
 
$x =& $GLOBALS;
 unset(
$GLOBALS);
 
array_pop($GLOBALS);
 
// ...以及對(duì) $GLOBALS 的任何其他寫入/讀寫操作
 
?>

注釋

注意:

“Superglobal”也稱為自動(dòng)化的全局變量。這就表示其在腳本的所有作用域中都是可用的。不需要在函數(shù)或方法中用 global $variable; 來訪問它。

注意: 變量可用性

與所有其他超全局變量不同,$GLOBALS在PHP中總是可用的。

注意:

從 PHP 8.1.0 起, $GLOBALS 現(xiàn)在是全局符號(hào)表的只讀副本。 也就是說,全局變量不能通過副本進(jìn)行修改。 在之前的版本中,$GLOBALS 數(shù)組和 PHP 數(shù)組通常傳值的行為不一樣,全局變量可通過副本修改。

<?php
// PHP 8.1.0 之前
$a 1;
$globals $GLOBALS// 表面意義的按值復(fù)制
$globals['a'] = 2;
var_dump($a); // int(2)

// 從 PHP 8.1.0 起
// 這不再修改 $a。先前的行為違反了按值語義。
$globals $GLOBALS;
$globals['a'] = 1;

// 要恢復(fù)以前的行為,請(qǐng)迭代其副本并將每個(gè)屬性分配回 $GLOBALS。
foreach ($globals as $key => $value) {
    
$GLOBALS[$key] = $value;
}
?>