【问题标题】:Call static function with arguments , that has no arguments successfully execute调用带参数的静态函数,没有参数的成功执行
【发布时间】:2014-10-07 04:28:17
【问题描述】:

您好,我正在使用 forward_static_call_array() 函数,我有一个示例。

<?php

class A
{
    const NAME = 'A';
    public static function test() {
        $args = func_get_args();
        echo static::NAME, " ".join(',', $args)."<br/>";
    }
}

class B extends A
{
    const NAME = 'B';

    public static function test() {
        echo self::NAME, "<br/>";
        forward_static_call_array(array('A', 'test'), array('more', 'args'));
        forward_static_call_array( 'test', array('other', 'args'));
    }
}

B::test("bar");

function test() {
        $args = func_get_args();
        echo "C ".join(',', $args)."<br/>";
    }

?>

这里的结果是

B
B more,args
C other,args

但是当我查看代码时,我看到它正在调用 B::test("bar"); 其他 2 个 test() 函数有 func_get_args()。但是B::test 也没有。所以我认为它应该弹出一个错误。但它工作正常。

怎么样?

  • 所以当我们在函数中使用forward_static_call_array() 时,函数中不需要有参数?

或

  • 可以使用参数调用不带任何参数的 PHP 静态函数?

请解释一下。非常感谢。

【问题讨论】:

    标签: php function static static-methods


    【解决方案1】:

    使用forward_static_call_array 并不特殊。每个函数或方法都有这种行为。

    PHP 支持用户定义的可变长度参数列表 职能。这是使用 PHP 5.6 中的 ... 标记实现的,并且 稍后,并使用 func_num_args()、func_get_arg() 和 PHP 5.5 及更早版本中的 func_get_args() 函数。

    function sum() {
        $acc = 0;
        foreach (func_get_args() as $n) {
            $acc += $n;
        }
        return $acc;
    }
    
    echo sum(1, 2, 3, 4);
    

    http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list

    http://php.net/manual/en/functions.arguments.php#functions.variable-arg-list.old

    【讨论】:

    • 但是这个函数 public static function test() { echo self::NAME, "
      "; forward_static_call_array(array('A', 'test'), array('more', 'args')); forward_static_call_array('test', array('other', 'args')); },是B类的测试函数,没有func_get_args函数?
    • @KanishkaPanamaldeniya ,没关系。没有语言检查。但有些功能可以检查它。
    猜你喜欢
    • 2014-11-28
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    相关资源
    最近更新 更多