php专区

 首页 > php专区 > PHP高级 > 面向对象MVC > php 类中多态的应用

php 类中多态的应用

分享到:
【字体:
导读:
          Instanceof:用来测定一个给定的对象是否来自指定的对象类,代码如下: ?php class A{} class B{} $thing = new A(); //returntrue if ( $thing instanceofA){ echo A ; } //returnfalse if ( $thing instanceofB){ echo B ; } ? //运行...

Instanceof:用来测定一个给定的对象是否来自指定的对象类,代码如下:

  1.  
  2. class A{} 
  3.  
  4. class B{} 
  5.  
  6. $thing=new A(); 
  7.  
  8. //return true 
  9.  
  10. if ($thing instanceof A) { 
  11.  
  12.     echo 'A'
  13.  
  14.  
  15. //return false 
  16.  
  17. if ($thing instanceof B) { 
  18.  
  19.     echo 'B'
  20.  
  21.  
  22. ?> 
  23.  
  24. //运行结果: 
  25.  
  26. //A 
  27.  
  28.  
  29. header("Content-Type:text/html;charset=UTF-8"); 
  30. //开源代码phpfensi.com 
  31. interface MyUsb{ 
  32.  
  33.     function type(); 
  34.  
  35.     function alert(); 
  36.  
  37.  
  38. class Zip implements MyUsb{ 
  39.  
  40.     function type(){ 
  41.  
  42.        echo "2.0"
  43.  
  44.     } 
  45.  
  46.     function alert(){ 
  47.  
  48.        echo "正在检查U盘驱动"
  49.  
  50.     } 
  51.  
  52.  
  53. class Mp3 implements MyUsb{ 
  54.  
  55.     function type(){ 
  56.  
  57.        echo "1.0"
  58.  
  59.     } 
  60.  
  61.     function alert(){ 
  62.  
  63.        echo "正在检查Mp3驱动"
  64.  
  65.     } 
  66.  
  67.  
  68. class Mypc{ 
  69.  
  70.     function PcUsb($what
  71.  
  72.     { 
  73.  
  74.        $what->type(); 
  75.  
  76.        $what->alert(); 
  77.  
  78.     } 
  79.  
  80.  
  81. $pc=new Mypc(); 
  82.  
  83. $zip=new Zip(); 
  84.  
  85. $mp3=new Mp3(); 
  86.  
  87. $pc->PcUsb($zip);//当插上的是U盘的时候 
  88.  
  89. echo "
    "
  90.  
  91. $pc->PcUsb($mp3);//当插上的是MP3的时候 
  92.  
  93. ?> 
  94.  
  95. //运行结果: 
  96.  
  97. //2.0正在检查U盘驱动 
  98. //1.0正在检查Mp3驱动 

对象引用都是一样的不分父类引用,还是子类引用,我们现在来看一个例子,首先还是要使用多态就要有父类对象和子类对象的关系,做一 个形状的接口或是抽象类做为父类,里面有两个抽象方法,一个求周长的方法,另一个是求 面积的方法,这接口的子类是多种不同的形状,每个形状又都有周长和面积,又因为父类是 一个接口,所以子类里面就必须要实现父类的这两个周长和面积的抽象方法,这样做的目的 是每种不同形状的子类都遵守父类接口的规范,都要有求周长和求面积的方法,代码如下:

  1. //定义了一个形状的接口,里面有两个抽象方法让子类去实现  
  2. interface Shape{  
  3. function area();  
  4. function perimeter();  
  5. }  
  6. //定义了一个矩形子类实现了形状接口中的周长和面积  
  7. class Rect implements Shape{  
  8. private $width;  
  9. private $height;  
  10. function __construct($width$height){  
  11. $this->width=$width;  
  12. $this->height=$height;  
  13. }  
  14. function area(){  
  15. return "矩形的面积是:".($this->width*$this->height);  
  16. }  
  17. function perimeter(){  
  18. return "矩形的周长是:".(2*($this->width+$this->height));  
  19. }  
  20. }  
  21. //定义了一个圆形子类实现了形状接口中的周长和面积  
  22. class Circular implements Shape{  
  23. private $radius;  
  24. function __construct($radius){  
  25. $this->radius=$radius;  
  26. }  
  27. function area(){  
  28. return "圆形的面积是:".(3.14*$this->radius*$this->radius);  
  29. }  
  30. function perimeter(){  
  31. return "圆形的周长是:".(2*3.14*$this->radius);  
  32. }  
  33. }  
  34. //把子类矩形对象赋给形状的一个引用  
  35. $shape=new Rect(5, 10);  
  36. echo $shape->area()."
    "
    ;  
  37. echo $shape->perimeter()."
    "
    ;  
  38. //把子类圆形对象赋给形状的一个引用  
  39. $shape=new Circular(10);  
  40. echo $shape->area()."
    "
    ;  
  41. echo $shape->perimeter()."
    "
    ;  
  42. ?> 
  43. /* 
  44. 上例执行结果:  
  45. 执行结果  
  46. 矩形的面积是:50  
  47. 矩形的周长是:30  
  48. 圆形的面积是:314  
  49. 圆形的周长是:62.8 
  50. */ 

通过上例我们看到,把矩形对象和圆形对象分别赋给了变量$shape,调用$shape 引用中 的面积和周长的方法,出现了不同的结果,这就是一种多态的应用,其实在我们PHP 这种弱 类形的面向对象的语言里面,多态的特性并不是特别的明显,其实就是对象类型变量的变项应用.

 
分享到:
php 面向对象编程之构造方法与析构方法
大多数类都有一种称为构造函数的特殊方法,当创建一个对象时,它将自动调用构造函 数,也就是使用new 这个关键字来实例化对象的时候自动调用构造方法. 构造函数的声明与其它操作的声明一样,只是其名称必须是__construct( ),这是PHP5 中 的变化,以前的版本中,构造函数的名称必须与类名相同,这种在PHP5 中仍然可以用,但 ...
没有了!
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……