php7变量,PHP7变量处理机制修改

PHP7变量处理机制修改

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_syntax

https://wiki.php.net/rfc/abstract_syntax_tree

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值