3、什么是类的重载

重载是类的多态的一种实现。
函数重载指一个标识符被用作多个函数名,且能够通过函数的参数个数或参数类型将这些同名的函数区分开来,调用不发生混淆。
即当调用的时候,虽然方法名字相同,但根据参数的不同可以自动调用相应的成员函数。
在php中,虽然不是很好实现重载的需求,但也是有2种方式可以实现:

  1. 1、使用func_num_args() func_get_args()函数实现,获得参数个数和参数内容。
  2. 2、使用class类所提供的__call()魔术方法。

重写与重载的区别是在于:

重写只存在于子类与父类中,
重载存在于一个类中。

第二种实现方式属于后续的课件内容, 这里就不做讲解了,我们下面先来学习下第一种实现方法:

<?php
class Demo{
    public function method(){
        $numargs = func_num_args(); // 获得参数数量
        $args    = func_get_args(); // 获得参数数组
        switch ($numargs) {//通过变量个数来确定调用哪个方法
            case 2:
                $this->method2($args[0], $args[1]);
                break;
            case 3:
                $this->method3($args[0], $args[1], $args[2]);
                break;
        }
    }
    private function method2($var1, $var2){
        echo 1;
    }
    private function method3($var1, $var2, $var3){
        echo 2;
    }
}
# 根据参数自动调用不同的方法
$obj = new Demo();
$obj->method(1, 2);
$obj->method(1, 2, 3);