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");
- //開源代碼Vevb.com
- interface MyUsb{
- function type();
- function alert();
- }
- class Zip implements MyUsb{
- function type(){
- echo "2.0";
- }
- function alert(){
- echo "正在檢查U盤驅動";
- }
- }
- 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);//當插上的是U盤的時候
- echo "<br/>";
- $pc->PcUsb($mp3);//當插上的是MP3的時候
- ?>
- //運行結果:
- //2.0正在檢查U盤驅動
- //1.0正在檢查Mp3驅動
對象引用都是一樣的不分父類引用,還是子類引用,我們現在來看一個例子,首先還是要使用多態就要有父類對象和子類對象的關系,做一 個形狀的接口或是抽象類做為父類,里面有兩個抽象方法,一個求周長的方法,另一個是求 面積的方法,這接口的子類是多種不同的形狀,每個形狀又都有周長和面積,又因為父類是 一個接口,所以子類里面就必須要實現父類的這兩個周長和面積的抽象方法,這樣做的目的 是每種不同形狀的子類都遵守父類接口的規范,都要有求周長和求面積的方法,代碼如下:
- <?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()."<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 這種弱 類形的面向對象的語言里面,多態的特性并不是特別的明顯,其實就是對象類型變量的變項應用.
新聞熱點
疑難解答