Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中函数参数的求值顺序_Php_Evaluation_Operator Precedence - Fatal编程技术网

PHP中函数参数的求值顺序

PHP中函数参数的求值顺序,php,evaluation,operator-precedence,Php,Evaluation,Operator Precedence,PHP函数参数的求值顺序是否保证始终相同 谢谢。发件人: 信息可以通过参数列表传递给函数,参数列表是以逗号分隔的表达式列表。参数从左到右求值 从理论上讲,它可能会在PHP的未来版本中发生变化,但我肯定不会期望它发生变化 (为了每个人的利益,请不要编写任何依赖它的代码…通常,是的。作为: [函数]参数从左到右求值 但有两种情况根本不计算参数: 未定义函数 这0适用于所有版本的PHP 缺少构造函数,未定义函数的特例 PHP=7.1上的1。它被称为“Rasmus优化”,只在没有正式构造函数的情况下构造

PHP函数参数的求值顺序是否保证始终相同

谢谢。

发件人:

信息可以通过参数列表传递给函数,参数列表是以逗号分隔的表达式列表。参数从左到右求值

从理论上讲,它可能会在PHP的未来版本中发生变化,但我肯定不会期望它发生变化

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

通常,是的。作为:

[函数]参数从左到右求值

但有两种情况根本不计算参数:

未定义函数 这
0
适用于所有版本的PHP

缺少构造函数,未定义函数的特例 PHP<7.1上的
0
,PHP>=7.1上的
1
。它被称为“Rasmus优化”,只在没有正式构造函数的情况下构造类时才会发生。另见,和



总之,本手册是正确的。对于定义的函数,参数从左到右求值,然后传递到函数中。未定义的函数(不存在构造函数是其特例)不符合函数的条件,因此调用前的求值本身是未定义的。

您能否提供一个示例,说明它可能会有所不同…?例如在某些特殊情况下,变量会在作为函数参数传递的表达式中被修改,在同一个调用中将同一变量用作不同的函数参数时?54161看起来并不是特别相关。只要它只发生在错误报告编号上……感谢您成为我的测试用例,@deceze.)它实际上与其他地方的短路没有任何区别(例如,
false&$bar++
)-结果不会被使用,所以不必费心评估它。不过,这远不如直觉。
$calls = 0;
register_shutdown_function(function () use (&$calls) {
    echo $calls;
});
func_does_not_exist($calls++);
class Foo {}

$bar = 0;
$foo = new Foo($bar++);
echo $bar;