从PHP 5.2到5.3的func_num_args,func_get_arg和func_get_args的行为差异

时间:2011-02-12 17:36:59

标签: php

我看过PHP手册。但我不明白早期版本和更高版本的PHP之间的行为差​​异。我不明白这句话:

  

因为此函数取决于当前范围以确定参数详细信息,所以它不能用作5.3.0之前的版本中的函数参数。如果必须传递此值,则应将结果分配给变量,并且应传递该变量。

2 个答案:

答案 0 :(得分:11)

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

function some_func() {
    $args = func_get_args();
    some_other_func($args);
}

在PHP 5.3中删除了此限制,您现在可以直接传递结果。

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

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

答案 1 :(得分:8)

这意味着这在5.2中无效:

function foo() {
    $array = array_map('strtolower', func_get_args());
}
foo('BAR', 'BAZ');

它会因致命错误而中止:

  

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

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