php - 在 PHP 中写入函数的返回值
问题描述
PHP语言规范说:
变量是原则上可以用作左值的表达式
和
仅当函数返回可修改的值 byRef 时,函数调用的值才是可修改的左值。
expr:
variable T_CONCAT_EQUAL expr
callable_variable:
simple_variable
{ $$ = zend_ast_create(ZEND_AST_VAR, $1); }
| dereferencable '[' optional_expr ']'
{ $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); }
| constant '[' optional_expr ']'
{ $$ = zend_ast_create(ZEND_AST_DIM, $1, $3); }
| dereferencable '{' expr '}'
{ $$ = zend_ast_create_ex(ZEND_AST_DIM, ZEND_DIM_ALTERNATIVE_SYNTAX, $1, $3); }
| dereferencable T_OBJECT_OPERATOR property_name argument_list
{ $$ = zend_ast_create(ZEND_AST_METHOD_CALL, $1, $3, $4); }
| function_call { $$ = $1; }
;
variable:
callable_variable
{ $$ = $1; }
| static_member
{ $$ = $1; }
| dereferencable T_OBJECT_OPERATOR property_name
{ $$ = zend_ast_create(ZEND_AST_PROP, $1, $3); }
;
那么为什么我不能在 PHP 7.3 中做到这一点呢?
<?php
$a = 'HELLO';
function &foo() {
global $a;
return $a;
}
foo() .= ' WORLD';
echo $a;
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;
推荐阅读
- node.js - 如何在 Cloud Function for Firebase 中执行查询并检索特定属性
- javascript - 如何在使用钩子触发操作后重新呈现我的 redux 状态?
- tableau-api - 如何在标题中显示散点图上的标记数
- excel - 在 Excel 的公式中使用最新的单元格
- docker - Keycloak 8:已添加用户名为“admin”的用户
- c - 如何在c中通过引用传递typedef struct
- java - Katalon Studio 从 PDF 文件页面截取屏幕截图
- angular - 带有 Asp.Net Core WebAPI 的 Angular 具有模棱两可的模型
- c# - 我们能知道谁访问了密钥保管库资源吗
- html - 从模板本地生成 HTML 页面,只需更改页面顶部的标题