dqnqpqv3841 2012-07-24 13:25
浏览 29

too long

Is it a good practice to use in the base class a method which will be defined in a derived one? For instance:

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条回答 默认 最新

  • drno94939847 2012-07-24 13:28
    关注

    AFAIK this is not a good practice.

    Inheritance is needed for the purpose of defining new behaviors and new specialized types of objects. Which means that you could/*should* write a base class now and extend it some time late on.

    If the base class knows something about the structure of it's derived classes that's somewhat of a contract, the derived classes need to implement some functions in order to work with that base class in which case "design by contract" springs to mind.

    If you need to have a certain function in the derived class maybe it should be declared as an abstract function in the base class or as a method in an interface the class implements.

    That way it's not unreasonable for the base class to know about methods implemented in the derived classes.

    Also AFAIK other stricter languages would not permit this at compiler level. You would really need to do some refactoring to achieve this in c++ or Java something along the lines of what I said above using abstract functions in the base class or interfaces.

    评论

报告相同问题?

悬赏问题

  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图