原文地址:PHP設計模式(五):多態php
在PHP設計模式(四):繼承中咱們介紹了繼承,利用extends來進行程序設計的方法。
在PHP設計模式(二):抽象類和接口中咱們介紹了接口,事實上也存在利用interface的程序設計方法,那就是多態。
和C/C++,Java,Python等語言同樣,PHP也支持多態。多態更可能是是一種面向對象程序設計的概念,讓同一類對象執行同一個接口,但卻實現不一樣的邏輯功能。編程
仍是用動物、鯨魚和鯉魚來舉例:設計模式
<?php interface IEat { function eatFish(); function eatMoss(); } class Whale implements IEat { public function eatFish() { echo "Whale eats fish.\n"; } public function eatMoss() { echo "Whale doesn't eat fish\n"; } } class Carp implements IEat { public function eatFish() { echo "Carp doesn't eat moss.\n"; } public function eatMoss() { echo "Carp eats moss.\n"; } } $whale = new Whale(); $whale->eatFish(); $whale->eatMoss(); $carp = new Carp(); $carp->eatFish(); $carp->eatMoss(); ?>
運行一下:bash
$ php Inheritance.php Whale eats fish. Whale doesn't eat fish. Carp eats moss. Carp doesn't eat moss.
注意PHP的函數定義不包含返回值,所以徹底能夠給不一樣的接口實現返回不一樣類型的數據。這一點和C/C++,Java等語言是不一樣的。此外,返回不一樣類型的數據,甚至不返回結果,對程序設計來講,會額外增長維護成本,已經和使用接口的初衷不一樣了(接口爲了封裝實現,而不一樣的返回值事實上是須要調用者去理解實現的)。函數
合理利用多態對接口進行不一樣的實現,簡化你的編程模型,讓代碼易於維護。設計