Pengubahsuaian mekanisme pengendalian boleh ubah


Versi PHP7 telah membuat pelarasan pada mekanisme parsing pembolehubah Pelarasan adalah seperti berikut:

1 Pembolehubah tidak langsung, atribut dan rujukan kaedah ditafsirkan dari kiri ke kanan:

 $$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']()

Jika anda ingin menukar susunan. tafsiran, anda boleh menggunakan Braces:

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

2. Kata kunci global kini hanya boleh merujuk kepada pembolehubah mudah

global $$foo->bar;    // 这种写法不支持。
global ${$foo->bar};  // 需用大括号来达到效果。

3. Ia tidak lagi berguna untuk menggunakan kurungan untuk melampirkan pembolehubah atau fungsi

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
Perhatikan bahawa panggilan dalam kedua ayat disertakan dalam kurungan, tetapi masih melaporkan ralat yang ketat ini. Versi PHP sebelumnya tidak akan melaporkan ralat ini.

4 Susunan elemen tatasusunan atau atribut objek yang dibuat secara automatik semasa tugasan rujukan adalah berbeza daripada sebelumnya.

$array = [];
$array["a"] =& $array["b"];
$array["b"] = 1;
var_dump($array);

PHP7产生的数组:["a" => 1, "b" => 1]
PHP5产生的数组:["b" => 1, "a" => 1]