当前位置:  开发笔记 > 编程语言 > 正文

变量处理顺序:PHP 7中的变化

如何解决《变量处理顺序:PHP7中的变化》经验,为你挑选了1个好方法。

现在使用新的PHP 7.0.0,我有点担心所谓的"变量变量"的评估顺序的变化.

在此页面的 "对变量处理的更改"下,将显示一个表,其中包含表达式示例及其处理顺序,在PHP 5和PHP 7中.列出的四个表达式为:

$$foo['bar']['baz']
$foo->$bar['baz']
$foo->$bar['baz']()
Foo::$bar['baz']()

给定以下字符串和数组:

$qux = 'quux';
$foo = array('bar' => array('baz' => 'qux'));

表中的第一个表达式在$$foo['bar']['baz']PHP 5 中被解释为一个名为value in的变量的值$foo['bar']['baz'],因此值为$qux,即 'quux'.

但是,在PHP 7中,正如我所理解的那样,同一个表达式将被解释为一个名为value in的变量$foo,因此我希望PHP注意'数组到字符串转换',因为它$foo是一个数组.

表中的其他示例似乎是同一主题的变体.

当然,我很好奇为什么在PHP 7中改变了这一点(具体来说,为什么这种改变比向后兼容更重要),然而,这对SO来说不是一个合适的问题.我的问题更实用:

应对这种不兼容性的推荐方法是什么?

当然,加入大括号违规表达式将有助于(${$foo['bar']['baz']},$foo->{$bar['baz']},$foo->{$bar['baz']}()Foo::{$bar['baz']}()),但是这是非常麻烦的,经历吨的旧代码,寻找相对较少occurances ...

否则,这四个示例是唯一可能的语法变体吗?也就是说,我可以创建一个RegExp和grep所有违规代码吗?可能存在哪些其他变化?



1> Andrea..:

Rasmus Lerdorf编写了一个静态分析工具,可以发现这些所谓的统一变量语法问题,称为Phan https://github.com/etsy/phan

Phan可以选择-b, --backward-compatibility-checks检查潜在的PHP 5 - > PHP 7 BC问题.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有