【问题标题】:Difference in behaviour of func_num_args,func_get_arg and func_get_args from php 5.2 to 5.3func_num_args、func_get_arg 和 func_get_args 从 php 5.2 到 5.3 的行为差异
【发布时间】:2011-02-12 17:36:58
【问题描述】:

我看过 PHP 手册。但我不明白早期版本和后期版本的 PHP 在行为上的区别。我不明白这个说法:

由于该函数依赖于当前作用域来确定参数细节,因此在 5.3.0 之前的版本中不能作为函数参数使用。如果必须传递此值,则应将结果分配给一个变量,并传递该变量。

【问题讨论】:

    标签: php


    【解决方案1】:

    如果您想将其中一个函数的结果传递给另一个函数或方法,在 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内部有更透彻了解的人可以给你一个更完整的答案。

    【讨论】:

    • 这可能与 PHP 在调用函数的范围和传递给它的函数之间感到非常困惑有关。
    • 在一些非常奇怪的场景中似乎也可以正常工作:codepad.org/MQkQnnJH
    【解决方案2】:

    表示这在5.2中无效:

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

    它将因致命错误而中止:

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-02
      • 2016-02-17
      • 2010-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      相关资源
      最近更新 更多