PHP函数参数的评估顺序是否保证始终相同?
感谢。
答案 0 :(得分:7)
通常,是的。正如the manual states:
[Function]参数从左到右进行评估。
但是有两个边缘情况参数根本没有评估:
$calls = 0;
register_shutdown_function(function () use (&$calls) {
echo $calls;
});
func_does_not_exist($calls++);
所有PHP版本上的outputs 0
。
class Foo {}
$bar = 0;
$foo = new Foo($bar++);
echo $bar;
PHP上的这个outputs 0
< 7.1和PHP上的1
> = 7.1。它被称为“Rasmus优化”,它仅在构造没有正式构造函数的类的情况下发生。另请参阅#67829,#54162和#54170。
总之,手册是正确的。对于已定义的函数,从左到右计算参数,然后传递给函数。未定义的函数(不存在的构造函数是特殊情况)不符合函数的条件,因此调用之前的求值本身是未定义的。
答案 1 :(得分:4)
来自the manual:
信息可以通过参数列表传递给函数,参数列表是逗号分隔的表达式列表。参数从左到右进行评估。
理论上它可能会在PHP的未来版本中发生变化,但我当然不会期望它。
(请不要写任何依赖它的代码,为了每个人的利益......)