PHP 函数重载有什么作用?

php
2022-08-30 20:54:35

在像Java这样的语言中,重载可以这样使用:

void test($foo, $bar){}
int test($foo){}

然后,如果你用2个参数调用,例如,第一个函数将被调用。如果你只传递了 1 个参数,例如 ,将调用第 2 个函数。test()test($x, $y);test($x);

从手册中可以看出 php 5 确实有重载,但它有什么用呢?我似乎无法理解有关此主题的手册。


答案 1

PHP的重载含义与Java不同。在 PHP 中,重载意味着您可以通过实现一些__magic方法(如 、 .加载具有新成员的对象。__get__set__call__callStatic

PHP 中的重载提供了动态“创建”属性和方法的方法。这些动态实体通过魔术方法进行处理,人们可以在类中为各种操作类型建立。

例如:

class Foo
{
    public function __call($method, $args)
    {
        echo "Called method $method";
    }
}

$foo = new Foo;

$foo->bar(); // Called method bar
$foo->baz(); // Called method baz

顺便说一句,PHP从PHP 4.3.0开始就支持这种重载。唯一的区别是,在 PHP 5 之前的版本中,您必须使用 overload() 函数显式激活重载。


答案 2

如果要像 Java 中那样重载函数,请不要指定任何参数,而是使用 func_num_argsfunc_get_args 函数来获取传递给该函数的参数数或参数本身:

function test() {
    $args = func_get_args();
    switch (count($args)) {
        case 1:
            // one argument passed
            break;
        case 2:
            // two arguments passed
            break;
        default:
            // illegal numer of arguments
            break;
    }
}

推荐