php list () неопределенное поведение

Я наткнулся на эту строку:

list($diff, $current, $concurrent) = $diff;

Документация утверждает, что это должно привести к неопределенному поведению. Каковы возможные варианты такого поведения? Переменная $ diff — это массив, содержащий 3 элемента с переменным содержимым.

Эта строка является частью приложения, содержащего ошибку, и автор этой строки недоступен. Хотя я почти уверен, что это не то, что я ищу, было бы неплохо быть на 100% уверенным.
Я использую PHP 5.6.25 в качестве FPM / FastCGI.
Заранее спасибо.

0

Решение

Как документация для списка () также говорится:

В PHP 5 list () назначает значения, начиная с самого правого параметра. В PHP 7 list () начинается с самого левого параметра.

Другими словами: эта строка может работать как задумано в PHP 5, потому что переменная $diff которая появляется с обеих сторон, является последней переменной, которая будет назначена. Однако в PHP 7 $diff переменная назначается первой, поэтому $diff к тому времени уже изменились $current а также $concurrent сделано.

В целом, я думаю, что подсказка о неопределенном поведении связана с тем фактом, что вы не можете полагаться на определенные назначения для получения ожидаемых результатов, если переменная появляется по обе стороны от = знак. Обход проблемы может выглядеть следующим образом:

list($temp, $current, $concurrent) = $diff;
$diff = $temp;
unset($temp);

Таким образом вы избегаете неопределенного поведения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]