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的灵活性。

  多态其实就是,只抽象的声明父类型,具体工作由其子类型对象来完成,这样,不同的子类型对象完成,就有不同的效果。

posted @ 2015-05-25 21:31  museluo  阅读(184)  评论(0编辑  收藏  举报