我想为数组元素赋值,该元素由带参考参数的函数返回。代码:
function f(&$y) {
return $y;
}
$y = '';
$x = array(
'a' => 1,
'b' => 2,
'c' => f($y)
);
var_dump($x); // 'c' is empty
$y = 3;
var_dump($x); // 'c' is still empty
在这种情况下,我很确定我的整个引用都是错误的。即使我尝试通过像function &f(&y) {}
这样的引用返回,仍然无法正常工作。
答案 0 :(得分:3)
如果你想通过函数调用(你可以直接使用别名$y
),那么你需要使用引用返回(参见:Returning References ) ,请参阅函数名前的&
符号:
function &f(&$y) {
return $y;
}
此外,您需要别名该引用(需要一些特殊处理才能使PHP解析器允许):
$y = '';
$x = array(
'a' => 1,
'b' => 2,
'c' => &${${''}=&f($y)?!1:!1},
);
答案 1 :(得分:2)
你应该试试
$x = array(
'a' => 1,
'b' => 2,
'c' => &$y
);
答案 2 :(得分:1)
首先,一个警告:这种代码太混乱了,你应该只在枪口威胁时才这样做。当他们必须调试这样的代码时,你未来的自我会讨厌你。
那就是说,为了完成这项工作,你需要“moar references”:
function &f(&$y) { // two ref-signs here...
return $y;
}
$y = '';
$x = array(
'a' => 1,
'b' => 2,
'c' => &f($y) // ..and one more here
);
然而,上面仍然是does not compile(我不知道为什么会在时间允许的情况下进行调查),因为在创建数组的过程中似乎不允许这样做。但这有效:
$y = '';
$x = array('a' => 1, 'b' => 2);
$x['c'] = &f($y); // seems this guy needs to be alone
$y = 3;
print_r($x);
<强> See it in action 强>
答案 3 :(得分:-1)
根据PHP手册的快速浏览,看起来你的array()语法缺少一个逗号。
$x = array(
'a' => 1,
'b' => 2,
'c' => f($y)
);
实际应该是
$x = array(
'a' => 1,
'b' => 2,
'c' => f($y),
);
来源:http://php.net/manual/en/language.types.array.php
我多年没写过PHP,我只是按照作者的例子来做。