如何在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()中的全局x和x指向相同的值。完成此操作后:
$x =& $y[2];
局部x现在指向$y[2]的值,但全局x仍然指向旧值。你需要阅读这一页这里没有错。函数set()中的x是全局变量x的局部别名。换句话说,函数set()中的全局x和x指向相同的值。完成此操作后:
$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赋值(它将其放回数组中,并在函数外部设置),它就可以工作,但反过来就不行了……嗯。