Я наткнулся на эту строку:
list($diff, $current, $concurrent) = $diff;
Документация утверждает, что это должно привести к неопределенному поведению. Каковы возможные варианты такого поведения? Переменная $ diff — это массив, содержащий 3 элемента с переменным содержимым.
Эта строка является частью приложения, содержащего ошибку, и автор этой строки недоступен. Хотя я почти уверен, что это не то, что я ищу, было бы неплохо быть на 100% уверенным.
Я использую PHP 5.6.25 в качестве FPM / FastCGI.
Заранее спасибо.
Как документация для списка () также говорится:
В PHP 5 list () назначает значения, начиная с самого правого параметра. В PHP 7 list () начинается с самого левого параметра.
Другими словами: эта строка может работать как задумано в PHP 5, потому что переменная $diff
которая появляется с обеих сторон, является последней переменной, которая будет назначена. Однако в PHP 7 $diff
переменная назначается первой, поэтому $diff
к тому времени уже изменились $current
а также $concurrent
сделано.
В целом, я думаю, что подсказка о неопределенном поведении связана с тем фактом, что вы не можете полагаться на определенные назначения для получения ожидаемых результатов, если переменная появляется по обе стороны от =
знак. Обход проблемы может выглядеть следующим образом:
list($temp, $current, $concurrent) = $diff;
$diff = $temp;
unset($temp);
Таким образом вы избегаете неопределенного поведения.
Других решений пока нет …