php-多型的理解

Jtoman發表於2019-02-16

一、前情引入


面嚮物件語言的三大特性:封裝、繼承、多型

  • 封裝是類的構建過程,php具有;
  • php也具有繼承的特性。
  • 由於php是弱型別語言,因此多型體現地十分模糊。

定義:多型是指在物件導向中能夠根據使用類的上下文來重新定義或改變類的性質和行為。

二、php多型

舉例說明:

<?php
/**
教師類有一個drawPolygon()方法需要一個Polygon類,用來畫多邊形,此方法內部呼叫多邊形的draw()方法,
但由於弱型別,我們可以傳入Circle類,就會呼叫Circle類的draw方法,這就事與願違了。
甚至可以傳入阿貓、阿狗類,如果這些類沒有draw()方法還會報錯。
*/
class Teacher{
    function drawPolygon($polygon){ 
        $polygon->draw(); 
    }    
}

class Polygon{
    function draw(){
        echo "draw a polygon";
    }
}

class Circle{
    function draw(){
        echo "draw a circle";
    }
}
?>

可以看出這樣靈活的多型,需要一些控制,在PHP5.3以後可以對引數做型別限制,如下:

// 仿java,在變數引數前加一個限制類名
    function drawPolygon(Polygon $polygon){ 
        $polygon->draw(); 
    }

相關文章