當前位置:文思屋>社會工作>電腦培訓>

php物件導向全攻略:多型的應用

文思屋 人氣:2.29W

多型的應用

php物件導向全攻略:多型的應用

多型是除封裝和繼承之外的另一個物件導向的三大特性之一,我個人看來PHP 中雖然可

以實現多型,但和C++還有Java 這些物件導向的語言相比,多型性並不是那麼突出,因為PHP

本身就是一種弱型別的語言,不存在父類物件轉化為子類物件或者是子類物件轉化為父類對

象的問題,所以多型的應用並不是那麼的明顯;所謂多型性是指一段程式能夠處理多種型別

物件的能力,比如說在公司上班,每個月財務發放工資,同一個發工資的方法,在公司內不

同的員工或是不同職位的.員工,都是通過這個方法發放的,但是所發的工資都是不相同的。

所以同一個發工資的方法就出現了多種形態。對於物件導向的程式來說,多型就是把子類對

象賦值給父類引用,然後呼叫父類的方法,去執行子類覆蓋父類的那個方法,但在PHP 裡是

弱型別的,物件引用都是一樣的不分父類引用,還是子類引用。

我們現在來看一個例子,首先還是要使用多型就要有父類物件和子類物件的關係。做一

個形狀的介面或是抽象類做為父類,裡面有兩個抽象方法,一個求周長的方法,另一個是求

面積的方法;這介面的子類是多種不同的形狀,每個形狀又都有周長和麵積,又因為父類是

一個介面,所以子類裡面就必須要實現父類的這兩個周長和麵積的抽象方法,這樣做的目的

是每種不同形狀的子類都遵守父類介面的規範,都要有求周長和求面積的方法。

程式碼片段

複製程式碼 程式碼如下:

<?

//定義了一個形狀的介面,裡面有兩個抽象方法讓子類去實現

interface Shape{

function area();

function perimeter();

}

//定義了一個矩形子類實現了形狀介面中的周長和麵積

class Rect implements Shape{

private $width;

private $height;

function __construct($width, $height){

$this->width=$width;

$this->height=$height;

}

function area(){

return "矩形的面積是:".($this->width*$this->height);

}

function perimeter(){

return "矩形的周長是:".(2*($this->width+$this->height));

}

}

//定義了一個圓形子類實現了形狀介面中的周長和麵積

class Circular implements Shape{

private $radius;

function __construct($radius){

$this->radius=$radius;

}

function area(){

return "圓形的面積是:".(3.14*$this->radius*$this->radius);

}

function perimeter(){

return "圓形的周長是:".(2*3.14*$this->radius);

}

}

//把子類矩形物件賦給形狀的一個引用

$shape=new Rect(5, 10);

echo $shape->area()."
";

echo $shape->perimeter()."
";

//把子類圓形物件賦給形狀的一個引用

$shape=new Circular(10);

echo $shape->area()."
";

echo $shape->perimeter()."
";

?>

上例執行結果:

執行結果

矩形的面積是:50

矩形的周長是:30

圓形的面積是:314

圓形的周長是:62.8

通過上例我們看到,把矩形物件和圓形物件分別賦給了變數$shape,呼叫$shape 引用中

的面積和周長的方法,出現了不同的結果,這就是一種多型的應用,其實在我們PHP 這種弱

類形的物件導向的語言裡面,多型的特性並不是特別的明顯,其實就是物件型別變數的變項

應用。