- 1 关于PHP7新特性
- 2. PHP7非兼容性改动
- 3 PHP7新增功能
- 4 PHP7SAPI模块修改
- 5 PHP7弃用功能
- 6 PHP7修改的函数
- 7 PHP7新增函数
- 8 PHP7新增类和接口
- 9 PHP7移除的扩展和SAPI
- 10 PHP7其他对扩展的修改
- 11 PHP7新增常量
- 12 PHP7INI配置文件修改
- 13 PHP7windows支持
- 14 PHP7其他修改
变量处理机制修改
- 2015-11-12 14:36:21
- 开源春哥
- 32367
- 最后编辑:开源春哥 于 2015-11-27 08:22:38
- 分享链接
PHP7版本对变量解析机制做了调整,调整如下:
一、间接变量、属性和方法引用都按照从左到右的顺序进行解释:
$$foo['bar']['baz'] // interpreted as ($$foo)['bar']['baz'] $foo->$bar['baz'] // interpreted as ($foo->$bar)['baz'] $foo->$bar['baz']() // interpreted as ($foo->$bar)['baz']() Foo::$bar['baz']() // interpreted as (Foo::$bar)['baz']()
如果想改变解释的顺序,可以使用大括号:
${$foo['bar']['baz']} $foo->{$bar['baz']} $foo->{$bar['baz']}() Foo::{$bar['baz']}()
二、global关键字现在只能引用简单变量
global $$foo->bar; // 这种写法不支持。 global ${$foo->bar}; // 需用大括号来达到效果。
三、用括号把变量或者函数括起来没有用了
function getArray() { return [1, 2, 3]; } $last = array_pop(getArray()); // Strict Standards: Only variables should be passed by reference $last = array_pop((getArray())); // Strict Standards: Only variables should be passed by reference注意第二句的调用,是用圆括号包了起来,但还是报这个严格错误。之前版本的PHP是不会报这个错误的。
四、引用赋值时自动创建的数组元素或者对象属性顺序和以前不同了。
$array = []; $array["a"] =& $array["b"]; $array["b"] = 1; var_dump($array); PHP7产生的数组:["a" => 1, "b" => 1] PHP5产生的数组:["b" => 1, "a" => 1]
参考资料:
https://wiki.php.net/rfc/uniform_variable_syntaxhttps://wiki.php.net/rfc/abstract_syntax_tree
评论列表
ddd
2015-11-18 22:57:40
参考资料链接有误
wwccss
2015-11-27 08:23:01
谢谢反馈,已经更正。
1/1
发表评论