[转]PHP5中——abstract抽象、final最终和static静态
1.abstract
一. 面向对象程序通过类的分层结构构建起来. 在单重继承语言如PHP中, 类的继承是树状的. 一个根类有一个或更多的子类,再从每个子类继承出一个或更多下一级子类. 当然,可能存在多个根类,用来实现不同的功能. 在一个良好设计的体系中,每个根类都应该有一个有用的接口, 可以被应用代码所使用. 而抽象类就可以提供多个实用的接口.如果你建立了一个只有抽象方法的类,那么你就定义了一个接口(interface).
- abstract
class aaa{ -
-
abstract function bbb(); -
- }
当然,如果一个类中有一个或多个抽象的方法,那么这个类就成了抽象类.抽象类不能实例化,只能继承,然后,实例化子类.值得注意的是,它的子类必须覆写所有方法(all method),这样,子类就成为普通的类,才可以实例化.否则,子类中只要有一个抽象方法,那么子类必须声明是抽象类,在class
二.抽象的类的声明方法:
- //定义抽象类aaa为基类
- abstract
class aaa { -
-
abstractfunction bbb(); -
-
abstractfunction ccc(); - }
- //定义普通类childfromaaa
- //继承aaa抽象类
- class
childfromaaa extendsaaa { -
-
//重写所有抽象类中的方法 -
publicfunction bbb(){ -
//..... -
} -
publicfunction 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 implementsFoo, B ar { -
function a(Foo $foo) { -
// ... -
} -
-
function b(Bar $bar) { -
// ... -
} - }
-
- $a =
new FooBar; - $b =
new FooBar; -
- $a->a($b);
- $a->b($b);
2.final
final / final关键字
PHP5中新增加了final关键字,它可以加在类或类方法前。标识为final的类方法,在子类中不能被覆写。标识为final的类,不能被继承,而且其中的方法都默认为final类型。
Final方法:
<?php
class Foo {
}
?>
Final类:
<?php
final class Foo {
}
// 下面这一行是错误的
// class Bork extends Foo {}
?>
3.static
) static
static关键字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享,能一定程序对该成员尽心保护。类的静态变量,非常类似全局变量,能够被所有类的实例共享,类的静态方法也是一样的,类似于全局函数。类的静态方法能访问类的静态的属性。另外说明的是,static的成员,必须使用self来访问,使用this会出错。
(关于this和self的异同,请参考: http://blog.csdn.net/heiyeshuwu/archive/2004/11/03/165828.aspx )
浙公网安备 33010602011771号