如何在PHP函数中设置引用?

如何在PHP函数中设置引用?,php,reference,Php,Reference,我正在尝试在函数中设置引用。但是,我无法让它工作 我试过的代码: function set(&$x, &$y) { $x =& $y[2]; } $y = array( 0, 1, array('something') ); $x = array('old_val'); print "1. inited, x is:\n"; print_r($x); set($x, $y); print "\n2. now, x is: "; pr

我正在尝试在函数中设置引用。但是,我无法让它工作

我试过的代码:

function set(&$x, &$y)
{
    $x =& $y[2];
}

$y = array(
    0,
    1,
    array('something')
);

$x = array('old_val');
print "1. inited, x is:\n";
print_r($x);

set($x, $y);

print "\n2. now, x is: ";
print_r($x);
输出:

1. inited, x is:
Array
(
    [0] => old_val
)

2. now, x is: Array
(
    [0] => old_val
)
我希望$x的值与$y相同[2]。此外,对$x的任何进一步修改都应更改$y[2]。(如C中的指针赋值:
x=&y[2];
) 我做错了什么?如有任何建议,我们将不胜感激

编辑:
实际上,出于测试目的,测试代码中的函数set()是一个简化的函数。它实际上是select_节点(&$x,&$tree,$selector):这将从树中选择一个与$selector匹配的节点,并将其分配给$x。

这里没有任何错误。函数set()中的x是全局变量x局部别名。换句话说,函数set()中的全局xx指向相同的值。完成此操作后:

$x =& $y[2];

局部x现在指向$y[2]的值,但全局x仍然指向旧值。你需要阅读这一页

这里没有错。函数set()中的x是全局变量x局部别名。换句话说,函数set()中的全局xx指向相同的值。完成此操作后:

$x =& $y[2];

局部x现在指向$y[2]的值,但全局x仍然指向旧值。您需要阅读此页

引用不是指针,其行为稍有不同

发生的情况是set()函数中的$x变量被绑定到与$y[2]相同的位置,但是set()内的$x与set()外的$x不同。它们都指向同一个位置,但您只更新了set()内部的位置,一旦set()返回,该位置就不再相关。无法在调用范围中绑定$x,因为它不存在于函数中

见:

您可能需要声明set()以返回引用:

function &set(&$x, &$y) {}
这样称呼它:

$x =& set($x,$y);

请参见

引用不是指针,其行为稍有不同

发生的情况是set()函数中的$x变量被绑定到与$y[2]相同的位置,但是set()内的$x与set()外的$x不同。它们都指向同一个位置,但您只更新了set()内部的位置,一旦set()返回,该位置就不再相关。无法在调用范围中绑定$x,因为它不存在于函数中

见:

您可能需要声明set()以返回引用:

function &set(&$x, &$y) {}
这样称呼它:

$x =& set($x,$y);

好吧,很奇怪。如果在函数中为$x赋值(它将它放回数组中,并在函数外部设置),它就可以工作,但反过来就不行了……嗯,好吧,非常奇怪。如果在函数中为$x赋值(它将其放回数组中,并在函数外部设置),它就可以工作,但反过来就不行了……嗯。