通常,是的.如手册所述:
[功能]参数从左到右进行评估.
但是有两种边缘情况,根本没有评估参数:
$calls = 0;
register_shutdown_function(function () use (&$calls) {
echo $calls;
});
func_does_not_exist($calls++);
Run Code Online (Sandbox Code Playgroud)
这将在所有版本的PHP上输出 0
.
class Foo {}
$bar = 0;
$foo = new Foo($bar++);
echo $bar;
Run Code Online (Sandbox Code Playgroud)
这在PHP <7.1 上输出 0
,1
在PHP> = 7.1时输出.它被称为"Rasmus优化",它仅在构造没有正式构造函数的类的情况下发生.另见#67829,#54162和#54170.
总之,手册是正确的.对于已定义的函数,从左到右计算参数,然后传递给函数.未定义的函数(不存在的构造函数是特殊情况)不符合函数的条件,因此调用之前的评估本身是未定义的.
归档时间: |
|
查看次数: |
495 次 |
最近记录: |