PHP 函数重载

2022-08-30 06:19:13

来自C++后台;)
如何重载PHP函数?

一个函数定义(如果有任何参数)和另一个函数定义(如果没有任何参数)?在 PHP 中可能吗?或者我应该使用if来检查是否有任何参数从$ _GET和POST传递??并将它们联系起来?


答案 1

不能重载 PHP 函数。函数签名仅基于其名称,不包含参数列表,因此不能有两个同名的函数。PHP 中的类方法重载与许多其他语言中的类方法重载不同。PHP使用相同的单词,但它描述了不同的模式。

但是,您可以声明一个接受可变数量参数的可变参数函数。您可以使用 func_num_args()func_get_arg() 来传递参数,并正常使用它们。

例如:

function myFunc() {
    for ($i = 0; $i < func_num_args(); $i++) {
        printf("Argument %d: %s\n", $i, func_get_arg($i));
    }
}

/*
Argument 0: a
Argument 1: 2
Argument 2: 3.5
*/
myFunc('a', 2, 3.5);

答案 2

PHP不支持传统的方法重载,但是你可以实现你想要的一种方法,就是利用神奇的方法:__call

class MyClass {
    public function __call($name, $args) {

        switch ($name) {
            case 'funcOne':
                switch (count($args)) {
                    case 1:
                        return call_user_func_array(array($this, 'funcOneWithOneArg'), $args);
                    case 3:
                        return call_user_func_array(array($this, 'funcOneWithThreeArgs'), $args);
                 }
            case 'anotherFunc':
                switch (count($args)) {
                    case 0:
                        return $this->anotherFuncWithNoArgs();
                    case 5:
                        return call_user_func_array(array($this, 'anotherFuncWithMoreArgs'), $args);
                }
        }
    }

    protected function funcOneWithOneArg($a) {

    }

    protected function funcOneWithThreeArgs($a, $b, $c) {

    }

    protected function anotherFuncWithNoArgs() {

    }

    protected function anotherFuncWithMoreArgs($a, $b, $c, $d, $e) {

    }

}

推荐