php5的抽象方法和抽象类的理解
关键字: php abstract interface implements前两天去一公司面试,他们给了一份试卷来考核php的知识.整份试卷大至不是太难,就是最后有一题是"任意写一抽象类并写出调用过程",由于,平常对抽象类的概念不很清楚,所以,也不敢乱写...唉,没pass..
这两天有点时间,看了看抽象类的资料,写一些对抽象方法和抽象类的理解,也算是亡羊补牢吧 :(
一. 面向对象程序通过类的分层结构构建起来. 在单重继承语言如PHP中, 类的继承是树状的. 一个根类有一个或更多的子类,再从每个子类继承出一个或更多下一级子类. 当然,可能存在多个根类,用来实现不同的功能. 在一个良好设计的体系中,每个根类都应该有一个有用的接口, 可以被应用代码所使用. 而抽象类就可以提供多个实用的接口.如果你建立了一个只有抽象方法的类,那么你就定义了一个接口(interface).
在抽象类中定义的方法,也都是抽象方法,当然,抽象方法与普通的方法不一样,它只是子类中普通方法的一个占位符(只是占个地主不启作用),没有任何代码,也没有"{}"包含,而是以";"结束的.
- abstract class aaa{
- abstract function bbb();
- }
当然,如果一个类中有一个或多个抽象的方法,那么这个类就成了抽象类.抽象类不能实例化,只能继承,然后,实例化子类.值得注意的是,它的子类必须覆写所有方法(all method),这样,子类就成为普通的类,才可以实例化.否则,子类中只要有一个抽象方法,那么子类必须声明是抽象类,在class 关键字前加上 abstract.
二.抽象的类的声明方法:
1.使用abstact 限定语.
- //定义抽象类aaa为基类
- abstract class aaa {
- abstract function bbb();
- abstract function ccc();
- }
- //定义普通类childfromaaa
- //继承aaa抽象类
- class childfromaaa extends aaa {
- //重写所有抽象类中的方法
- public function bbb(){
- //.....
- }
- public function ccc(){
- //...
- ....
- }
- }
- //实例化子类
- $child = new childfromaaa; //right
2. PHP中有interface 和implements关键字. 你可以用interface来代替抽象类, 用implements来代替extends来说明你的类定义或使用一个接口.
- //定义抽象基类
- interface Foo {
- function a(Foo $foo);
- }
- //定义另一个抽象类
- interface Bar {
- function b(Bar $bar);
- }
- //定义子类childfromaaa
- //继承aaa抽象类(接口)
- //实现多类继承
- class FooBar implements Foo, B ar {
- function a(Foo $foo) {
- // ...
- }
- function b(Bar $bar) {
- // ...
- }
- }
- $a = new FooBar;
- $b = new FooBar;
- $a->a($b);
- $a->b($b);
当然,你采用那种方式,完全取决于个人的喜好而已.抽象类我现在就理解这么多,如果有更深层的运用,慢慢来学习吧^_^
- 23:18
- 浏览 (403)
- 评论 (0)
- 分类: Python/Ruby
- 相关推荐
发表评论
- 浏览: 58378 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
我的相册
共 8 张
链接
- 荼蘼泡沫--李小北的博客
- jQuery中文入门教程
- jQuery API 文档
- visualjquery库
- json官方站点
- jQuery插件聚总
- jQuery 中文官方论坛
- Smarty在线手册
- ADODB在线中文手册
- 开源 PHP 开发框架 - FleaPHP
- jQuery中文社区
- flash 上传文件
- Perler
- Python民间组织
- Python的Zope/Phone
- YAML教程
- PyYAML 文档
- phpunit(单元测试)
- jquery menu
- Caja项目
- Caja-wiki
- erlang 中文社区
- Ria技术
- 视觉社区
- Try To Remember
- wind-bell
- lihaiyan
最新评论
-
windowsXP下配置apache+p ...
我按照你的配置不能运行,然后我又加上了以下几句就OK了SetHandler pe ...
-- by chmod777 -
ubuntu +mplayer+ffmpeg+ ...
转换成功了吗。想知道结果。
-- by hanting99 -
javascript定义类或对象之 ...
...
-- by baishou520 -
今日发现
貌似你上学的时候没有学习过数据库这门必修课!!!
-- by xzh_endless -
javascript中setTimeout ...
asdf
-- by wuqi123321






评论排行榜