Это предупреждение появляется всякий раз, когда вы назначаете ссылку на свойство другому свойству. Аналогичное предупреждение появляется при назначении ссылки на массив для элемента массива, например,
$array[$x] = &$array[$y];
. Причина этих предупреждений заключается в том, что порядок создания изменился в PHP 7. Это объясняется ниже в https://github.com/php/php-src/blob/PHP-7.0/UPGRADING
Элементы массива или свойства объекта, которые автоматически создаются во время присвоений по ссылкам, теперь будут приводить к другому порядку. Например,
$array = [];
$array["a"] =& $array["b"];
$array["b"] = 1;
var_dump($array);
теперь приводит к массиву ["a" => 1, "b" => 1]
, тогда как ранее результат был ["b" => 1, "a" => 1]
;
Соответствующие RFC:
Если вы на самом деле не заботитесь о порядке свойств в объект или порядок элементов в ассоциативном массиве, это предупреждение можно игнорировать. Если вам нужен старый порядок, вы должны убедиться, что свойство справа уже было создано до назначения.
Я не думаю, что есть способ его подавить, кроме как отключением всех предупреждений с помощью используя --level=error
. Даже если код сначала создает свойство RHS, я ожидаю, что вы получите предупреждение во время назначения, так как сомневаюсь, что он может выполнить анализ semanti c, чтобы определить, является ли свойство новым.