好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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" );  //开源代码phpfensi.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 这种弱 类形的面向对象的语言里面,多态的特性并不是特别的明显,其实就是对象类型变量的变项应用.

 

查看更多关于php 类中多态的应用的详细内容...

  阅读:49次