Modification du mécanisme de gestion des variables


La version PHP7 a apporté des ajustements au mécanisme d'analyse des variables. Les ajustements sont les suivants :

1. Les variables indirectes, les attributs et les références de méthode sont interprétés de gauche à droite :

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

Si vous souhaitez modifier l'ordre des variables. interprétation, vous pouvez utiliser des accolades :

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

2. Le mot-clé global ne peut désormais faire référence qu'à des variables simples

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

3. Il n'est plus utile d'utiliser des parenthèses pour entourer des variables ou des fonctions

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
Notez que l'appel dans la seconde La phrase est entre parenthèses, mais signale quand même cette erreur stricte. Les versions précédentes de PHP ne signalaient pas cette erreur.

4. L'ordre des éléments du tableau ou des attributs d'objet automatiquement créés lors de l'attribution des références est différent d'avant.

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

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