PHP:函数的重载

多态是面向对象的三大特性之一(继承性,封装性,多态性),而方法的重载又是多态的两种形式之一(覆盖,重载).
所谓重载:指一个标识符被用作多个函数名,且能够通过函数的参数个数或者参数类型将这些同名的函数区分开来
其实,个人认为上面的解释,有严重误导读者的嫌疑,因为.在PHP的一个类中,不可能存在名字一样的函数

class Lausen{

    public function play($num){

    }

    public function play($num1,$num2)
    {

    }
}

这里写图片描述
所以说.PHP其实不直接支持函数的重载,但是可以通过魔法方法

function __call($name, $arguments)
    {
        // TODO: Implement __call() method.
    }

来进行间接的支持,通过调用一个没有定义的方法,来判断传进来的参数类型或者参数个数,来进行不同的方法的调用,如下例:

class overLoad{

    public $object = "对象";
    public $arr = "数组";
    public $str = "字符串";

    public function __call($name, $arguments)
    {
        // TODO: Implement __call() method.
        if ($name == "disPlay"){

            if (is_object($arguments[0])){

                return $this->object;

            }else if (is_array($arguments[0])){

                return $this->arr;

            }else {

                return $this->str;
            }
        }
    }
}

//1:类的实例化
$ov = new overLoad;
echo $ov->disPlay("lausen")."<br>";
echo $ov->disPlay(array(1,2,3))."<br>";
echo $ov->disPlay($ov);

打印结果
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值