如何實作 $GLOBALS 陣列的功能
$GLOBALS array、declared global 這 2 種方式 100% 可以運作的很好在設值方面,
但是若在參考指派方面將有差異,下面例子將使得區域變數被全域變數所參考(這並不뜊|造成存取破壞)。
$GLOBALS array:
$a="global";
function foo()
{
$bar="local";
$GLOBALS['a']= &$bar;
}
foo();
echo $a; //local
declared global:
$a="global";
function foo()
{
$bar="local";
global $a; // $a=&$GLOBALS['a']
$a=&$bar;
}
foo();
echo $a; //global ?
為何 declared global 方式沒有辦法讓 global 變數參考到 local 變數? 關鍵在於
global $a 等於 $a=&$GLOBALS['a'],將產生區域變數 a 而此 a 參考到 global 變
數裡的數值結構,故 $a=&$bar 只是把區域變數 a 裡的數值結構換成是指向此 local
變數 bar 裡的數值結構,所以根本影響不到 global 變數 a。
那麼要如何指派陣列才能像 $GLOBALS 取出的元素位置是 global 變數的左值?
是否這是 script engine 產生的特別陣列? 一般在原碼中無法達到類似功能 。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.211.42.183
PHP 近期熱門文章
PTT數位生活區 即時熱門文章
125
129