[转]PHP5中——abstract抽象、final最终和static静态

本文深入探讨了面向对象程序设计中类的分层结构、单重继承、抽象类的概念及用途,包括抽象方法的定义与实现,以及final、static关键字的作用。详细解释了如何在PHP中使用抽象类与接口,提供了实例化与多继承的实践方法。

1.abstract

一. 面向对象程序通过类的分层结构构建起来. 在单重继承语言如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);    

2.final

final / final关键字
PHP5中新增加了final关键字,它可以加在类或类方法前。标识为final的类方法,在子类中不能被覆写。标识为final的类,不能被继承,而且其中的方法都默认为final类型。
Final方法:
<?php
class Foo {
   final function bar() {
       // …
   }
}
?>
Final类:
<?php
final class Foo {
   // class definition
}
// 下面这一行是错误的
// class Bork extends Foo {}
?>

3.static

) static
static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心保护。类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样的,类似于全局函数。类的静态方法能访问类的静态的属性。另外说明的是,static的成员,必须使用self来访问,使用this会出错。
(关于this和self的异同,请参考: http://blog.youkuaiyun.com/heiyeshuwu/archive/2004/11/03/165828.aspx )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值