在
PHP7中添加了错误,我遇到以下代码的问题:
(some complex expression)->my_property = 1
请注意我分配给对象的字段,而不是对象本身(分配给临时对象没有意义,我同意,但在这里并非如此).
这给了我一个错误“不能在写上下文中使用临时表达式”.当我重写为:
$tmp = (some complex expression); $tmp->my_property = 1;
一切都好.问题是我必须有单个表达式(赋值是一个表达式),并且因为PHP现在不支持逗号运算符,所以我要用两个语句来讨论.
对我来说这是巨大的差异,因为我无法将整个代码作为表达式进一步传递.在“复杂表达”中,一切都是有效的,所以我很乐意在PHP中禁用该检查.
可能吗?怎么样?
我的代码是自动编写的(它是生成的),表达式的结果是一个有效的PHP对象,问题是PHP以某种方式没有注意到它.此外,第二种形式有效.
更新:这是我上面提到的复杂表达式的一个例子:
(($a = foo()) === 0 ? $a : bar())
我要说不.
原文链接:https://www.f2er.com/php/130833.htmlEverything is valid inside that “complex expression” so I would love to simply disable that check in PHP.
我认为这里的问题是不允许写入临时表达式不仅仅是PHP中的“检查”,而是7.1版本(5c2120b
中引入)中语言的一部分.
截至5c2120b
年,语言语法已经更新,以重新定义可以引用的内容:
dereferencable: variable { $$= $1; } | '(' expr ')' { $$= $2; zend_do_begin_variable_parse(TSRMLS_C); $$.EA = 0; } | dereferencable_scalar { $$= $1; zend_do_begin_variable_parse(TSRMLS_C); $$.EA = 0; } ;