Что означают «возможные» предупреждения? Использование php7cc дает мне этот вывод (PHP 5.6 до 7.2) - PullRequest
1 голос
/ 06 марта 2020

Я использую php7cc, чтобы проверить, работают ли определенные функции после обновления с PHP 5.6 до PHP 7.2. Это старый проект, и поэтому в нем много унаследованного кода.

Используя php7cc, я получаю предупреждение:

[Предупреждение] Возможное создание свойства объекта во время присвоения по ссылке

И код / ​​строка для него:

$tt_campaign2Obj->local_cObj = &$tt_campaign2Obj->cObj;

Я не понимаю, что такое средства или есть ли какой-либо способ подавить эти предупреждения. Кажется, он работает, но я до сих пор не могу понять, почему он дает предупреждение. Кто-нибудь знает лучше случайно?

Спасибо.

1 Ответ

0 голосов
/ 06 марта 2020

Это предупреждение появляется всякий раз, когда вы назначаете ссылку на свойство другому свойству. Аналогичное предупреждение появляется при назначении ссылки на массив для элемента массива, например,

$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, чтобы определить, является ли свойство новым.

...