1

我想为数组元素赋值,该元素由带有引用参数的函数返回。编码:

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

4 回答 4

3

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

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

您还需要为该引用设置别名(这需要一些特殊处理以使 PHP 解析器允许这样做):

$y = '';

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

看到它在行动

于 2013-04-11T20:09:02.010 回答
2

你应该试试

$x = array(
    'a' => 1,
    'b' => 2,
    'c' => &$y
    );
于 2013-04-11T20:00:07.203 回答
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
);

但是,上面仍然无法编译(我不知道为什么,将在时间允许时进行调查),因为在创建数组的过程中似乎不允许这样做。但这有效:

$y = '';
$x = array('a' => 1, 'b' => 2);
$x['c'] = &f($y); // seems this guy needs to be alone

$y = 3;
print_r($x);

看到它在行动

于 2013-04-11T20:07:49.293 回答
-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 了,我只是按照作者放的例子。

于 2013-04-11T20:05:11.857 回答