加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 14:09:05 所属栏目:PHP教程 来源:网络整理
导读:在 PHP7中添加了错误,我遇到以下代码的问题: (some complex expression)-my_property = 1 请注意我分配给对象的字段,而不是对象本身(分配给临时对象没有意义,我同意,但在这里并非如此). 这给了我一个错误“不能在写上下文中使用临时表达式”.当我重写为: $
在 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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读