php之多态
多态:来源于强类型语言,比如java,参数声明的类型,传参时必须是该类型,这样是不灵活的,解决方法:声明参数时,声明为父类型,传参时,传其子类型,传不同的子类型就有不同的效果,这样称之为多态。
java多态实现
1 public class PolyTest 2 { 3 public static void main(String[] args) 4 { 5 Light light = new Light(); 6 RedGlass rg = new RedGlass(); 7 BlueGlass bg = new BlueGlass(); 8 light.on(rg); 9 light.on(bg); 10 } 11 } 12 13 class Light 14 { 15 public void on(Glass g) 16 { 17 g.display(); 18 } 19 } 20 21 class Glass 22 { 23 public void display() 24 { 25 26 } 27 } 28 29 30 class RedGlass extends Glass 31 { 32 public void display() 33 { 34 System.out.println("red light"); 35 } 36 } 37 38 39 class BlueGlass extends Glass 40 { 41 public void display() 42 { 43 System.out.println("blue light"); 44 } 45 }
php多态实现
1 <?php 2 class Light{ 3 //开灯 4 public function on(Glass $g){ 5 $g->display(); 6 } 7 } 8 class Glass{ 9 public function display(){ 10 } 11 } 12 class RedGlass extends Glass{ 13 public function display(){ 14 echo '红光照耀<br />'; 15 } 16 } 17 class BlueGlass extends Glass{ 18 public function display(){ 19 echo '蓝光照耀<br />'; 20 } 21 } 22 class GreenGlass extends Glass{ 23 public function display(){ 24 echo '绿光照耀<br />'; 25 } 26 } 27 class Pig{ 28 public function display(){ 29 echo '八戒下凡,哼哼坠地!'; 30 } 31 } 32 $light = new Light();//创建一个手电筒 33 34 //创建3种玻璃 35 $red = new RedGlass(); 36 $blue = new BlueGlass(); 37 $green = new GreenGlass(); 38 39 $light->on($red);//变红灯 40 $light->on($blue);//变蓝灯 41 $light->on($green);//变绿灯 42 //调用错了 43 $pig = new Pig(); 44 //$light->on($pig);//因为class Pig没有继承Glass,因此也会报错
对于php来说,本身是不检测参数类型的,但是,php5.3以后,引入了对于对象类型的参数检测。注意,只能检测对象所属的类,这其实是限制了php的灵活性。
多态其实就是,只抽象的声明父类型,具体工作由其子类型对象来完成,这样,不同的子类型对象完成,就有不同的效果。