我正在尝试更改当前引用另一个值的全局值。我当前的实现不起作用:
$anna = array('Name' => "Anna");
$bella = array('Name' => "Bella");
$girl = &$anna;
function change(){
global $girl, $bella;
$girl = &$bella;
// $girl['Name'] is now 'Bella'
output_girl(); // This still outputs 'Anna'
}
function output_girl(){
global $girl;
echo $girl['Name'];
}
change();
// What do we want to see?
echo $anna['Name']; // Should still be 'Anna'
echo $bella['Name']; // Should still be 'Bella'
echo $girl['Name']; // Should now be 'Bella' (in above example this will still be 'Anna')
重要提示:
$girl = &change();
这样的返回值的解决方法并不能解决我的问题。重要的是,在 $girl
函数结束之前更改全局 change()
。 (原因是这是一个复杂项目中的一个问题,其中嵌套函数调用都希望使用相同的全局变量。)$GLOBALS
数组来编码解决方法。但是,我特别感兴趣是否可以使用示例代码中所示的 global
关键字来解决这个问题。如果没有,请了解为什么这在 PHP 中是不可能的。&
以使其成为$girl = $bella
也不是解决方案。全局 $girl 对象需要始终是脚本开头定义的原始数组的reference。我们永远不能复制/破坏引用。问题: 当我使用
global
关键字时,这在 PHP 中是不可能的吗?如果是这样,有人可以解释为什么吗?如果没有,有人可以解释如何使其工作吗?
$GLOBALS
:
$GLOBALS['girl'] = &$GLOBALS['bella'];
语句
global $girl
在某种程度上相当于$girl = &$GLOBALS['girl']
,所以它仍然是一个局部变量,后续赋值不会影响该全局变量的引用。