가변 핸들링 메커니즘 수정


PHP7 버전에서는 변수 구문 분석 메커니즘이 다음과 같이 조정되었습니다.

1 간접 변수, 속성 및 메서드 참조는 왼쪽에서 오른쪽으로 해석됩니다. # 🎜🎜#
 $$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']}()

2. 이제 전역 키워드는 단순 변수만 참조할 수 있습니다 # 🎜🎜##🎜 🎜#
global $$foo->bar;    // 这种写法不支持。
global ${$foo->bar};  // 需用大括号来达到效果。

3. 변수나 함수를 괄호로 묶는 것은 쓸모가 없습니다
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에서는 이 오류를 보고하지 않았습니다.

4. 참조 할당 시 자동으로 생성되는 배열 요소 또는 객체 속성의 순서가 이전과 다릅니다.


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

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