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 $$foo->bar; // 这种写法不支持。
- global ${$foo->bar}; // 需用大括号来达到效果。
注意第二句的调用,是用圆括号包了起来,但还是报这个严格错误。之前版本的PHP是不会报这个错误的。
- 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
- $array = [];
- $array["a"] =& $array["b"];
- $array["b"] = 1;
- var_dump($array);
- PHP7产生的数组:["a" => 1, "b" => 1]
- PHP5产生的数组:["b" => 1, "a" => 1]