gusucode.com > 同城苏州黄页系统php源码程序 > lib/lastAbstract.class.php
<? if( !class_exists('runtime') ) include_once($root_path."lib/runtime.class.php"); /** * 最后的抽象类 * * 他被设计为是 在继承树中 离现实类最近的 一个抽象类,这样,我们想将某个功能 以抽象类的方式 添加到继承树种的时候,只要添加到 这个类以前,那么这个类以后的所有 实现类 都回继承这一功能,并且不必 为众多的直接实现类 一一修改继承关系。 * 例如 抽象类 A 派生了三个 实现类 a,b,c 如图: * / a * A - b * \ c * 后来我们又希望 将 某些功能 左为抽象类抽象类 B 加入到继承树种 A 之后,即 A 不直接具有 B 的功能,但 a,b,c 做为实现类 应该具有, 那么就是: * / a * A - B - b * \ c * 但是这样做的话,a,b,c 的承属关系 就要被一一修改,才能保证 继承树的正确, 但如果我们 忽略了 还有一个 实现类d 也是从 A 派生,而也同样需要 B 的功能的话,情况就变的大乱了。 * * 所以,我们再使用一个抽象类 C,他很可能是一个空的类(就是什么也没有,没有属性,没有方法),但是所有的 实现类 都从他那里派生,而增加 所有实现类都希望 继承的功能时,为此功能编写一个抽象类,在继承树中 插入到 C 的前面: * 增加功能之前: * / a * A - C (空的抽象类) - b * \ c * 增加功能以后: * / a * A - B - C (空的抽象类) - b * \ c * \ d (也许我们忽略了 还有一个 d 的存在, 但那也没有关系,这个疏忽 不会造成糟糕的结果了:) * * 上图的 C 就是 “最后的抽象类”,他存在的意义,是为了维护继承树中 多分枝节点 的安全。 * */ class lastAbstract extends runtime { function lastAbstract() { # 直接调用基类 的 构造函数 $this->base(); # 初始化 运行测试函数 if( $this->debug >= __DEBUG_RUNTIME ) $this->init_runtime(); } } ?>