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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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())
我要说不.

我认为这里的问题是不允许写入临时表达式不仅仅是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版本.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 是否有禁用“无法在写入上下文中使用临时表达式”错误的开关?全部内容,希望文章能够帮你解决php – 是否有禁用“无法在写入上下文中使用临时表达式”错误的开关?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。