php之抽象类

  1 <?php
  2 /***
  3 抽象类:无法实例化,即不能new
  4 类前加abstract,此类就成为抽象类
  5 
  6 总结:
  7 类前加abstract是抽象类
  8 方法前加abstract是抽象方法
  9 
 10 抽象类不能实例化
 11 抽象方法不能有实体
 12 
 13 有抽象方法,则此类必是抽象类
 14 抽象类内,不一定有抽象方法
 15 
 16 即便全是具体方法,但类是抽象的,也不能实例化
 17 
 18 ***/
 19 //古人有制造飞机的构想
 20 abstract class FlyIdea {
 21     //抽象引擎,暂时无法实现,抽象方法,不能有函数体,即不能有{},结尾要加;
 22     public abstract function engine();
 23     //抽象平衡舵,也是无法实现
 24     public abstract function balance(); 
 25 
 26 }
 27 
 28 //明朝万户实现了引擎,平衡舵还没实现,因此类还是抽象的
 29 abstract class Rocket extends FlyIdea {
 30     public function engine() {
 31         echo '点燃火药,起飞<br />';
 32     }
 33 }
 34 
 35 //后来的人实现了平衡舵,所有抽象方法都实现了,类不再是抽象的,是具体的了,可以new了
 36 class Fly extends Rocket {
 37     public function balance() {
 38         echo '两个纸翼保持平衡~~~';
 39     }
 40     public function start(){
 41         $this->engine();
 42         for ($i = 0; $i < 10; $i++) {
 43             $this->balance();
 44             echo '平稳飞行<br />';
 45         }
 46     }
 47 }
 48 $apache = new Fly();
 49 $apache->start();
 50 
 51 
 52 
 53 /***
 54 请看如下情景:
 55 facebook 多国语言欢迎页面
 56 
 57 user登陆,有一个c字段,是其国家
 58 当各国人登陆时,看到各国语言的欢迎页面
 59 
 60 用面向过程思路来做
 61 
 62 $c = 'china';
 63 
 64 if ($c == 'china') {
 65     echo '你好,欢迎你';
 66 }else if ($c == 'english') {
 67     echo 'hello,welcome';
 68 }else if ($c == 'japan') {
 69     echo '哦嗨哟';
 70 }
 71 
 72 反思:当facebook进入泰国市场时,增加else if,扩展性很差
 73 ***/
 74 
 75 
 76 /***
 77 用面向对象思路来做
 78 开发者开发时
 79 知道子类都继承自一个抽象父类
 80 因此,可以不用去关心到底是哪个子类
 81 因为子类的规格和抽象的父类一致
 82 
 83 ***/
 84 //抽象一个类
 85 abstract class Welcome {
 86     //抽象一个方法,做模板
 87     abstract public function wel();
 88 }
 89 
 90 //继承抽象类
 91 class china extends Welcome {
 92     public function wel() {
 93         echo '你好,欢迎你';
 94     }
 95 
 96 }
 97 class english extends Welcome {
 98     public function wel() {
 99         echo 'hello,welcome';
100     }
101 }
102 class japan extends Welcome {
103     public function wel() {
104         echo '哦嗨哟';
105     }
106 }
107 $c = 'china';//english/japan
108 $wel = new $c();
109 $wel->wel();
110 /***
111 以后增加泰国的语言,只需增加一个泰国的welcome类就可以了
112 所以有一些面向对象的介绍中,说面向对象的一个特点是:可插拔特性
113 ***/
114 ?>

 

posted @ 2015-07-24 12:35  museluo  阅读(189)  评论(0编辑  收藏  举报