按函数返回引用分配数组值

时间:2013-04-11 19:57:38

标签: php pass-by-reference

我想为数组元素赋值,该元素由带参考参数的函数返回。代码:

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) {}这样的引用返回,仍然无法正常工作。

4 个答案:

答案 0 :(得分:3)

如果你想通过函数调用(你可以直接使用别名$y),那么你需要使用引用返回(参见:Returning References ) ,请参阅函数名前的&符号:

function &f(&$y) {
    return $y;
}

此外,您需要别名该引用(需要一些特殊处理才能使PHP解析器允许):

$y = '';

$x = array(
        'a' => 1,
        'b' => 2,
        'c' => &${${''}=&f($y)?!1:!1},
);

See it in action

答案 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,我只是按照作者的例子来做。