PHP:更新函数范围内的全局引用变量

问题描述 投票:0回答:1

我正在尝试更改当前引用另一个值的全局值。我当前的实现不起作用:

$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 中是不可能的吗?如果是这样,有人可以解释为什么吗?如果没有,有人可以解释如何使其工作吗?

php function variables reference global
1个回答
0
投票

您可以使用

$GLOBALS

$GLOBALS['girl'] = &$GLOBALS['bella'];

语句

global $girl
在某种程度上相当于
$girl = &$GLOBALS['girl']
,所以它仍然是一个局部变量,后续赋值不会影响该全局变量的引用。

© www.soinside.com 2019 - 2024. All rights reserved.