PHP設計模式(五):多態

原文地址:PHP設計模式(五):多態php

Introduction

PHP設計模式(四):繼承中咱們介紹了繼承,利用extends來進行程序設計的方法。
PHP設計模式(二):抽象類和接口中咱們介紹了接口,事實上也存在利用interface的程序設計方法,那就是多態。
和C/C++,Java,Python等語言同樣,PHP也支持多態。多態更可能是是一種面向對象程序設計的概念,讓同一類對象執行同一個接口,但卻實現不一樣的邏輯功能。編程

多態/Polymorphism

仍是用動物、鯨魚和鯉魚來舉例:設計模式

<?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等語言是不一樣的。此外,返回不一樣類型的數據,甚至不返回結果,對程序設計來講,會額外增長維護成本,已經和使用接口的初衷不一樣了(接口爲了封裝實現,而不一樣的返回值事實上是須要調用者去理解實現的)。函數

Summary

合理利用多態對接口進行不一樣的實現,簡化你的編程模型,讓代碼易於維護。設計

相關文章
相關標籤/搜索