[关闭]
@a5635268 2015-11-03T17:43:40.000000Z 字数 929 阅读 1021

PHP中的多态

PHP


多态的概念一般是强类型语言来谈的,因为强类型语言它必须要声明参数类型,比如一个手电筒对象的打开方法其参数申明了只能是蓝光,就不能传其他光。但可以用父类渲染的方式使其多态,比如声明一个光的父类,让其它颜色的光都继承自这个光的父类,申明其参数为父类光,然后传光的任何子类都可以;这就是强类型的多态;

但php是弱类型的动态语言,不检测参数类型,传什么都可以;但在php5.3版本可以声明参数为某对象;当声明参数为某类实例化后的对象时,就得用父类渲染的方式令其多态;

  1. <?php
  2. class Glass {
  3. public function display() {
  4. }
  5. }
  6. class RedGlass extends Glass{
  7. public function display() {
  8. echo '红光照耀<br />';
  9. }
  10. }
  11. class BlueGlass extends Glass {
  12. public function display() {
  13. echo '蓝光照耀<br />';
  14. }
  15. }
  16. class GreenGlass extends Glass {
  17. public function display() {
  18. echo '绿光照耀<br />';
  19. }
  20. }
  21. class Pig {
  22. public function display() {
  23. echo '八戒下凡,哼哼坠地!<br />';
  24. }
  25. }
  26. class Light {
  27. public function ons(Glass $g) {
  28. //这里的$g对象必须是由Glass或Glass的子类实例化而来;本用法只能在php5.3里面使用;
  29. //如果在遵循了PSR规范的框架里面,这里的Glass类同样可以写成这样的模式 Home\Controller\Glass $g
  30. //用玻璃渲染颜色
  31. $g->display();
  32. }
  33. }
  34. // 造手电筒
  35. $light = new Light();
  36. // 造红玻璃
  37. $red = new RedGlass();
  38. // 造蓝玻璃
  39. $blue = new BlueGlass();
  40. // 红灯亮
  41. $light->ons($red); //把对象传进方法内;
  42. // 蓝灯亮
  43. $light->ons($blue);
  44. // 猪八戒降生
  45. $pig = new Pig(); //$pig不是由Glass或Glass的子类实例化,所以会报错了;
  46. $light->ons($pig);
  47. ?>
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注