download1214 2019-07-21 13:33
浏览 96

调用构造中的其他类是不好的做法

I've recently tried to learn more about OOP, but I'm just not sure about the following.

Is it bad practice to call other classes in the construct like so:

class Main{
   function __construct(){
      $this->db = new DatabaseConnection(); 
      $this->rp = new ResponseHandler();
   }

   public function SelectUser( $user_id ){
      ...
      $this->db->query('...') // `query` is a method in DataBaseConnection
      ...
      return $this->rp->msg('...'); // `msg` is a method in ResponseHandler
}

In my eyes it seems like an easy and nice way to do this, but I don't know if this is actually the/a correct way of doing OOP.

  • 写回答

1条回答 默认 最新

  • duanfoumi5620 2019-07-21 14:22
    关注

    If you know that the methods of your Main class will need a DatabaseConnection and a ResponseHandler to perform whatever their job is, IMHO your approach is perfectly ok.

    Thus, you keep the implementation hidden from the user of your class. And that's what OOP is all about.

    I don't like the idea of dependency injection via constructor because it forces everybody up the chain of callers to know what other classes your Main class needs.

    评论

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能