變數處理機制修改
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]