php list() 未定义行为
php list() undefined behaviour
我遇到了这条线:
list($diff, $current, $concurrent) = $diff;
Documentation 声明这会导致未定义的行为。这种行为有哪些可能的变体?变量 $diff 是数组,包含 3 个内容可变的元素。
此行是包含错误的应用程序的一部分,此行的作者不可用。虽然我几乎可以肯定这不是我要找的东西,但能 100% 确定就更好了。
我正在使用 PHP 5.6.25 作为 FPM/FastCGI。
提前致谢。
正如 documentation for list() 还指出的那样:
In PHP 5, list() assigns the values starting with the right-most parameter. In PHP 7, list() starts with the left-most parameter.
换句话说:这一行可能会按 PHP 5 中的预期工作,因为出现在两边的变量 $diff
是最后一个被赋值的变量。但是,在 PHP 7 中,首先分配 $diff
变量,因此 $diff
在 $current
和 $concurrent
的分配完成时已经更改。
总的来说,我认为关于未定义行为的提示与这样一个事实有关,即如果变量出现在 =
符号的两侧,则您不能依赖某些赋值来产生预期的结果。该问题的解决方法可能如下所示:
list($temp, $current, $concurrent) = $diff;
$diff = $temp;
unset($temp);
这样可以避免未定义的行为。
我遇到了这条线:
list($diff, $current, $concurrent) = $diff;
Documentation 声明这会导致未定义的行为。这种行为有哪些可能的变体?变量 $diff 是数组,包含 3 个内容可变的元素。
此行是包含错误的应用程序的一部分,此行的作者不可用。虽然我几乎可以肯定这不是我要找的东西,但能 100% 确定就更好了。 我正在使用 PHP 5.6.25 作为 FPM/FastCGI。 提前致谢。
正如 documentation for list() 还指出的那样:
In PHP 5, list() assigns the values starting with the right-most parameter. In PHP 7, list() starts with the left-most parameter.
换句话说:这一行可能会按 PHP 5 中的预期工作,因为出现在两边的变量 $diff
是最后一个被赋值的变量。但是,在 PHP 7 中,首先分配 $diff
变量,因此 $diff
在 $current
和 $concurrent
的分配完成时已经更改。
总的来说,我认为关于未定义行为的提示与这样一个事实有关,即如果变量出现在 =
符号的两侧,则您不能依赖某些赋值来产生预期的结果。该问题的解决方法可能如下所示:
list($temp, $current, $concurrent) = $diff;
$diff = $temp;
unset($temp);
这样可以避免未定义的行为。