使用参数调用静态函数,但该函数没有成功执行的参数


Call static function with arguments , that has no arguments successfully execute

嗨,我正在使用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静态函数可以用参数调用吗

请解释一下。非常感谢。

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

PHP支持用户定义的可变长度参数列表功能。这是使用。。。PHP 5.6和稍后,并使用func_num_args()、func_get_arg()和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-参数列表

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