• PHP
  • PHP多态的理解之interface接口类

saonian saonian 17/12/26 11:55 226浏览

什么是多态呢,我觉得可以简单的理解为,同一事物对同一行为的不同反应。

可能还是不好理解,举个例子说明一下。

动物都会叫(暂且这么认为),猫是动物,狗也是动物,狗的叫声是wang wang wang ~,而猫是miao miao miao~。

上边的例子用代码实现如下:

interface animal{  
    public function cry();  
}  

class cat implements animal{  
    public function cry(){  
        echo "miao~ <br>";  
    }  
}  

class dog implements animal{  
    public function cry(){  
        echo "wang ~ <br>";  
    }  
}  

function tocry(animal $obj){  
    $obj->cry();  
}  

tocry(new dog());  
tocry(new cat());  

输出

wang ~   
miao~  

接口类还有其他的应用

interface User  
{  
    public function getDiscount();  

    public function getUserType();  
}  

class VipUser implements User  
{  
    const discount = 0.8;  

    public function getDiscount()  
    {  
        return self::discount;  
    }  

    public function getUserType()  
    {  
        return "Vip User";  
    }  
}  

class Goods  
{  
    private $price = 100;  
    private $ur;  

    public function buy(User $ur)  
    {  
        $this->ur = $ur;  
        $discount = $this->ur->getDiscount();  
        $usertype = $this->ur->getUserType();  
        echo "user type is : " . $usertype . ", price is : " . $this->price * $discount;  
    }  
}  

$g = new Goods();  
$g->buy(new VipUser());  

上个例子中体现了多态的两个特征

  • 子类重写父类方法
  • 父类指向子类

其实php的抽象类(abstract)和接口类(interface),个人觉得都是多态的体现。虽然不如java,OC等强类型语言那么明显。但是也是多态。

个人理解,可能有不对的地方。希望大家指出,共同交流进步。

人过留名 雁过留声

saonian

all or nothing, now or never.

话题
回复
粉丝