在PHP中写入函数的返回值

在PHP中写入函数的返回值,php,Php,说: 变量是原则上可以用作左值的表达式 及 仅当函数返回可修改值byRef时,函数调用的值才是可修改的左值 还有我的语法 那么为什么我不能在PHP7.3中这样做呢? 虽然可以从函数返回引用,但不能直接写入该引用 您必须首先指定引用 $a = 'HELLO'; function &foo() { global $a; return $a; } $b =& foo(); $b .= ' WORLD'; echo $a; 请注意:全局函数不是9/10的正确选择-使

说:

变量是原则上可以用作左值的表达式

仅当函数返回可修改值byRef时,函数调用的值才是可修改的左值

还有我的语法

那么为什么我不能在PHP7.3中这样做呢?


虽然可以从函数返回引用,但不能直接写入该引用

您必须首先指定引用

$a = 'HELLO';
function &foo() { 
    global $a;
    return $a;
}

$b =& foo();
$b .= ' WORLD';
echo $a;

请注意:全局函数不是9/10的正确选择-使用参数:)因为函数调用本身不是变量(我非常确定
function&foo()
不会将函数作为引用-在我看来,它甚至没有意义,但我可能完全错了)?您可以执行
$b=foo()世界",。。。有趣的是,尽管函数
foo()
返回一个引用,但这并不意味着它本身就是一个变量。你试图做的是在函数调用中附加一些东西——这是没有意义的。你自己在上面引用过:“函数调用的值是一个可修改的左值”。函数调用的值,而不是函数调用本身。您想为该值分配一些内容,但尝试分配给调用。这是一个不同。奇怪的是,这正是我在本地机器上得到的结论。。。从字面上看,你的代码和我的代码之间的唯一区别是我使用了双引号而不是单引号:那么为什么语法允许在T_CONCAT_EQUAL表达式的左侧调用函数?@bmewburn我不知道zend的语法中为什么会这样,但是PHP文档明确声明
使用返回的引用,您必须使用引用分配
。实际上,这可能是它是致命错误而不是解析错误的原因。
函数调用
可能是
变量
的一部分,因为
expr
定义的这一部分:
variable'=''&'variable{$$$=zend\u ast\u create(zend\u ast\u ASSIGN\u REF,$1,$4)}
和一些类似的定义。但这只是一种猜测。
PHP Fatal error:  Can't use function return value in write context in ...
$a = 'HELLO';
function &foo() { 
    global $a;
    return $a;
}

$b =& foo();
$b .= ' WORLD';
echo $a;