PHP。使用将在派生中定义的基类中的方法

时间:2012-07-24 13:25:27

标签: php oop inheritance

在基类中使用将在派生类中定义的方法是一种好习惯吗?例如:

abstract class CApplication {
    use TSingleton;

    protected final function singletonInstanceInit() {
        if (php_sapi_name() == 'cli') {
            $this->initCLIApp();
    }
        else {
            $this->initWebApp();
        }
    }
}

abstract class CWebApplication extends CApplication {   
      protected function initWebApp() { }
}

abstract class CCLIApplication extends CApplication {
    protected function initCLIApp() { }
}

2 个答案:

答案 0 :(得分:0)

AFAIK这不是一个好习惯。

为了定义新行为和新的特殊类型的对象,需要继承。这意味着你可以 / *应该*现在写一个基类并在一段时间后延长它。

如果基类知道它的派生类的结构有点像是契约,那么派生类需要来实现一些函数才能使用那个基类,在这种情况下“设计通过合同“浮现在脑海中。

如果你需要在派生类中拥有某个函数,那么它应该在基类中声明为abstract函数,或者作为类实现的接口中的方法。

这样,基类就知道派生类中实现的方法是不合理的。

AFAIK其他更严格的语言也不允许在编译器级别使用它。您真的需要进行一些重构,以便在c++Java中使用基类或接口中的抽象函数执行此操作。

答案 1 :(得分:0)

你所说的是两种不同的思想流派。我见过ruby开发人员做这样的事情,因为他们使用mixins(是的,很多宝石就是这样)。另一方面,如果你去问一位经典的Java程序员,他不会建议你这样做。你在代码中展示的自由类型只是动态类型语言给你的东西(我知道有些人会点头说我使用了CGLib),它们可以用一种黑客方式实现静态类型语言,或者它们不是一点也没用过。

长篇故事简短,如果我是你,我会调查情景,并决定我是否需要这样的黑魔法来完成我的任务?只要它不会损害代码质量,任何规则都是不好的。