php 類中多態的應用

來源:互聯網
上載者:User

php教程 類中多態的應用

 

Instanceof:用來測定一個給定的對象是否來自指定的對象類

 

<?php

class A{}

class B{}

$thing=new A();

//return true

if ($thing instanceof A) {

    echo 'A';

}

//return false

if ($thing instanceof B) {

    echo 'B';

}

?>

運行結果:

A

 

 

<?php

 

header("Content-Type:text/html;charset=UTF-8");

 

interface MyUsb{

    function type();

    function alert();

}

class Zip implements MyUsb{

    function type(){

       echo "2.0";

    }

    function alert(){

       echo "正在檢查隨身碟驅動";

    }

}

class Mp3 implements MyUsb{

    function type(){

       echo "1.0";

    }

    function alert(){

       echo "正在檢查Mp3驅動";

    }

}

class Mypc{

    function PcUsb($what)

    {

       $what->type();

       $what->alert();

    }

}

$pc=new Mypc();

$zip=new Zip();

$mp3=new Mp3();

$pc->PcUsb($zip);//當插上的是隨身碟的時候

echo "<br/>";

$pc->PcUsb($mp3);//當插上的是MP3的時候

?>

運行結果:

2.0正在檢查隨身碟驅動
1.0正在檢查Mp3驅動


對象引用都是一樣的不分父類引用,還是子類引用。 我們現在來看一個例子,首先還是要使用多態就要有父類對象和子類對象的關係。做一 個形狀的介面或是抽象類別做為父類,裡面有兩個抽象方法,一個求周長的方法,另一個是求 面積的方法;這介面的子類是多種不同的形狀,每個形狀又都有周長和面積,又因為父類是 一個介面,所以子類裡面就必須要實現父類的這兩個周長和面積的抽象方法,這樣做的目的 是每種不同形狀的子類都遵守父類介面的規範,都要有求周長和求面積的方法。
代碼如下:
<?
//定義了一個形狀的介面,裡面有兩個抽象方法讓子類去實現
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()."<br>";
echo $shape->perimeter()."<br>";
//把子類圓形對象賦給形狀的一個引用
$shape=new Circular(10);
echo $shape->area()."<br>";
echo $shape->perimeter()."<br>";
?>

上例執行結果:
執行結果
矩形的面積是:50
矩形的周長是:30
圓形的面積是:314
圓形的周長是:62.8
通過上例我們看到,把矩形對象和圓形對象分別賦給了變數$shape,調用$shape 引用中
的面積和周長的方法,出現了不同的結果,這就是一種多態的應用,其實在我們PHP 這種弱
類形的物件導向的語言裡面,多態的特性並不是特別的明顯,其實就是物件類型變數的變項
應用。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.