php – 是否有禁用“无法在写入上下文中使用临时表达式”错误的开关?

前端之家收集整理的这篇文章主要介绍了php – 是否有禁用“无法在写入上下文中使用临时表达式”错误的开关?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
PHP7中添加错误,我遇到以下代码的问题:
(some complex expression)->my_property = 1

请注意我分配给对象的字段,而不是对象本身(分配给临时对象没有意义,我同意,但在这里并非如此).

这给了我一个错误“不能在写上下文中使用临时表达式”.当我重写为:

$tmp = (some complex expression);
$tmp->my_property = 1;

一切都好.问题是我必须有单个表达式(赋值是一个表达式),并且因为PHP现在不支持逗号运算符,所以我要用两个语句来讨论.

对我来说这是巨大的差异,因为我无法将整个代码作为表达式进一步传递.在“复杂表达”中,一切都是有效的,所以我很乐意在PHP中禁用该检查.

可能吗?怎么样?

我的代码自动编写的(它是生成的),表达式的结果是一个有效的PHP对象,问题是PHP以某种方式没有注意到它.此外,第二种形式有效.

更新:这是我上面提到的复杂表达式的一个例子:

(($a = foo()) === 0 ? $a : bar())
我要说不.

Everything 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; }
;

Source on GitHub

此外,您会注意到代码库中的这些错误的来源在产生错误之前不会检查任何内容,例如: 12.

解决方法是降级到允许这样做的PHP版本.

原文链接:https://www.f2er.com/php/130833.html

猜你在找的PHP相关文章