首页 > 解决方案 > PHP将全局值分配给函数内另一个全局值的引用

问题描述

在使用 PHP 中的全局变量和引用时,我遇到了一个问题。我想将一个变量设置为函数内另一个变量的引用。令我惊讶的是,全局变量在函数调用后失去了它的引用。

在下面的代码中,您可以看到函数内部$a获取 value 5,但之后它又返回了旧值 ( 1)。$x另一方面,将分配的值保留在函数内部。

<?php

$a = 1;
$x = 2;
function test() {
    global $a;
    global $x;

    $a = &$x;
    $x = 5;

    echo PHP_EOL;
    echo $a . PHP_EOL;
    echo $x . PHP_EOL;
}

test();

echo PHP_EOL;
echo $a . PHP_EOL; // $a is 1 here instead of 5
echo $x . PHP_EOL;

$a = &$x;

echo PHP_EOL;
echo $a . PHP_EOL;
echo $x . PHP_EOL;

输出:

5
5

1
5

5
5

为什么$a函数完成后会丢失它的引用?

标签: phpreferenceglobal

解决方案


正如@Banzay 所注意到的,我相信$a = &$x;只会更改函数范围的变量。您应该使用$GLOBALS来更改函数中的值;

function test() {
    global $a;
    global $x;

    $GLOBALS['a'] = &$x;
    $x = 5;

    echo PHP_EOL;
    echo $a . PHP_EOL;
    echo $x . PHP_EOL;
}

在线尝试!

1
5

5
5

5
5

推荐阅读