PHP中函数参数的评估顺序

时间:2016-09-01 13:48:57

标签: php evaluation operator-precedence

PHP函数参数的评估顺序是否保证始终相同?

感谢。

2 个答案:

答案 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的未来版本中发生变化,但我当然不会期望它。

(请不要写任何依赖它的代码,为了每个人的利益......)