|
- <?php
- class CBASE
- {
- var $st_AAA = "NULL\n";
- function CBASE()
- {
- return;
- }
- }
- class CA extends CBASE
- {
- function CA()
- {
- return;
- }
- function chdMethodA()
- {
- $this->st_AAA = "Hello world!";
- }
- }
- class CB extends CBASE
- {
- function CB()
- {
- echo $this->st_AAA;
- return;
- }
-
- function chdMethodB()
- {
- CA::chdMethodA();
- echo $this->st_AAA;
- }
- }
- $cb = new CB();
- $cb->chdMethodB();
- ?>
复制代码
在这个例子中,我们的CA和CB类有共同的基类CBASE,如果已经实例化了CB,不想再实例化CA,因为CA的构造函数可能是会做一些重复性的工作,是我们所不需要的,那么我们只需要再CB中以静态的方式调用CA中的方法就可以了,这时CA的类甚至没有实例化,但已经可以访问基类中的成员,非常的高效。
大家再比较一下常规的做法:
- <?php
- class CBASE
- {
- var $st_AAA = "NULL\n";
- function CBASE()
- {
- return;
- }
- }
- class CA extends CBASE
- {
- function CA()
- {
- return;
- }
- function chdMethodA()
- {
- $this->st_AAA = "Hello world!";
- }
- }
- class CB extends CBASE
- {
- function CB()
- {
- return;
- }
-
- function chdMethodB()
- {
- echo $this->st_AAA;
- }
- }
- $obj1 = new CA();
- $obj2 = new CB();
- $obj1->chdMethodA();
- $obj2->chdMethodB();
- ?>
复制代码
即使上述的代码也不能像我们所想的那样工作,基类还是生成成了两个实例,php4也不提供virtual方式的继承,也没有静态成员的概念,所以如果要想在一个应用中只有一个基类被实例化,唯一的选择也就只能写我所推荐的代码了。 |
|