PHP5.2到5.3中func_num_参数、func_get_参数和func_get_参数的行为差异

PHP5.2到5.3中func_num_参数、func_get_参数和func_get_参数的行为差异,php,Php,我看过PHP手册。但是我不理解PHP早期版本和后期版本之间的行为差异。我不明白这种说法: 由于此函数依赖于当前范围来确定参数详细信息,因此在5.3.0之前的版本中不能将其用作函数参数。如果必须传递此值,则应将结果分配给变量,并传递该变量 这意味着这在5.2中无效: function foo() { $array = array_map('strtolower', func_get_args()); } foo('BAR', 'BAZ'); 它将中止,并出现致命错误: PHP致命错误:f

我看过PHP手册。但是我不理解PHP早期版本和后期版本之间的行为差异。我不明白这种说法:

由于此函数依赖于当前范围来确定参数详细信息,因此在5.3.0之前的版本中不能将其用作函数参数。如果必须传递此值,则应将结果分配给变量,并传递该变量


这意味着这在5.2中无效:

function foo() {
    $array = array_map('strtolower', func_get_args());
}
foo('BAR', 'BAZ');
它将中止,并出现致命错误:

PHP致命错误:func_get_args():不能用作函数参数


但是在5.3中,它是有效的代码。

如果要将其中一个函数的结果传递给另一个函数或方法,在5.3之前的PHP版本中,必须首先将结果分配给变量

function some_func() {
    $args = func_get_args();
    some_other_func($args);
}
PHP5.3中删除了此限制,现在可以直接传递结果

function some_func() {
    some_other_func(func_get_args());
}

至于为什么首先存在这种限制,也许有人对PHP的内部结构有更透彻的了解,可以给你一个更完整的答案。

这可能与PHP在调用函数的范围和传递给它的函数之间混淆有关。在一些非常奇怪的情况下,它似乎也能正常工作: