2007-07-11

php5的抽象方法和抽象类的理解

关键字: php abstract interface implements

    前两天去一公司面试,他们给了一份试卷来考核php的知识.整份试卷大至不是太难,就是最后有一题是"任意写一抽象类并写出调用过程",由于,平常对抽象类的概念不很清楚,所以,也不敢乱写...唉,没pass..

    这两天有点时间,看了看抽象类的资料,写一些对抽象方法和抽象类的理解,也算是亡羊补牢吧 :(

 一. 面向对象程序通过类的分层结构构建起来. 在单重继承语言如PHP中, 类的继承是树状的. 一个根类有一个或更多的子类,再从每个子类继承出一个或更多下一级子类. 当然,可能存在多个根类,用来实现不同的功能. 在一个良好设计的体系中,每个根类都应该有一个有用的接口, 可以被应用代码所使用. 而抽象类就可以提供多个实用的接口.如果你建立了一个只有抽象方法的类,那么你就定义了一个接口(interface).

    在抽象类中定义的方法,也都是抽象方法,当然,抽象方法与普通的方法不一样,它只是子类中普通方法的一个占位符(只是占个地主不启作用),没有任何代码,也没有"{}"包含,而是以";"结束的.

  1. abstract class  aaa{   
  2.   
  3.     abstract function bbb();   
  4.   
  5. }  

 当然,如果一个类中有一个或多个抽象的方法,那么这个类就成了抽象类.抽象类不能实例化,只能继承,然后,实例化子类.值得注意的是,它的子类必须覆写所有方法(all method),这样,子类就成为普通的类,才可以实例化.否则,子类中只要有一个抽象方法,那么子类必须声明是抽象类,在class 关键字前加上 abstract.

  二.抽象的类的声明方法:

      1.使用abstact 限定语.

  1. //定义抽象类aaa为基类   
  2. abstract class aaa {   
  3.   
  4.     abstract function bbb();   
  5.   
  6.     abstract function  ccc();   
  7. }   
  8. //定义普通类childfromaaa   
  9. //继承aaa抽象类   
  10. class childfromaaa extends aaa {   
  11.   
  12.    //重写所有抽象类中的方法   
  13.    public function bbb(){   
  14.     //.....     
  15.    }   
  16.    public function ccc(){   
  17.     //...   
  18.     ....   
  19.    }   
  20. }   
  21. //实例化子类   
  22. $child = new childfromaaa;  //right   
  23.   

 2. PHP中有interface 和implements关键字. 你可以用interface来代替抽象类, 用implements来代替extends来说明你的类定义或使用一个接口.

  1. //定义抽象基类   
  2. interface Foo {    
  3.    function a(Foo $foo);    
  4. }    
  5. //定义另一个抽象类   
  6. interface Bar {    
  7.    function b(Bar $bar);    
  8. }    
  9. //定义子类childfromaaa   
  10. //继承aaa抽象类(接口)   
  11. //实现多类继承   
  12. class FooBar implements Foo, B ar {    
  13.    function a(Foo $foo) {    
  14.        // ...    
  15.    }    
  16.   
  17.    function b(Bar $bar) {    
  18.        // ...    
  19.    }    
  20. }    
  21.   
  22. $a = new FooBar;    
  23. $b = new FooBar;    
  24.   
  25. $a->a($b);    
  26. $a->b($b);    

当然,你采用那种方式,完全取决于个人的喜好而已.抽象类我现在就理解这么多,如果有更深层的运用,慢慢来学习吧^_^

 

  • php5类.rar (58.9 KB)
  • 描述: php5新增的类特性,很有帮助理解的...
  • 下载次数: 17
评论
发表评论

您还没有登录,请登录后发表评论

purpen
搜索本博客
我的相册
094c3b62-6dc1-3fe7-b0e9-ea18ca4a5b75-thumb
谷歌音乐搜索
共 8 张
存档
最新评论