如何實作 $GLOBALS 陣列的功能

看板PHP作者 (big bomb)時間18年前 (2007/10/14 14:51), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
$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
文章代碼(AID): #174RnRm0 (PHP)
文章代碼(AID): #174RnRm0 (PHP)