作者superstition (big bomb)
看板PHP
标题如何实作 $GLOBALS 阵列的功能
时间Sun Oct 14 14:51:06 2007
$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