PHP - 扩展__construct

Lee*_*Lee 30 php constructor extends class

我想知道你是否可以帮助我...

我有两个类,一个扩展另一个类.B类将被各种不同的对象扩展并用于常见的数据库交互.现在我希望B类处理它的连接和断开,没有来自A类或任何外部输入的指示. .

我所理解的问题是扩展类不会自动运行其__construct函数..有没有办法解决这个问题?

提前致谢..

class a extends b
{
   public function __construct()
   {
   }   

   public function validateStuff()
   {
      $this->insert_record();
   }
}

class b
{
   public function __construct()
   {
      $this->connect();
   }

   protected function connect()
   {
      return true;
   }

   public function insert_record()
   {
      return true;
   }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*ker 78

除非在类a中定义了方法__construct(),否则在实例化子类a时,类b中定义的父方法将自动运行__construct().

class a extends b { 
} 

class b { 
   public function __construct() 
   { 
      echo 'In B Constructor'; 
   } 
} 

$x = new a();
Run Code Online (Sandbox Code Playgroud)

如果__construct()在类a中定义了一个方法,那么这将覆盖__construct()类b中方法的使用....它将运行而不是类b __construct()方法

class a extends b { 
   public function __construct() 
   { 
      echo 'In A Constructor'; 
   } 
} 

class b { 
   public function __construct() 
   { 
      echo 'In B Constructor'; 
   } 
} 

$x = new a();
Run Code Online (Sandbox Code Playgroud)

因此,如果您的子类__construct()定义了一个方法,那么如果您想要执行该方法,则需要显式调用父类的构造函数.

class a extends b { 
   public function __construct() 
   { 
      parent::__construct();
      echo 'In A Constructor'; 
   } 
} 

class b { 
   public function __construct() 
   { 
      echo 'In B Constructor'; 
   } 
} 

$x = new a();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢:) - stackoverflow非常善于拥有和查找相关信息,你可以沉迷于这样的工作流程,"喜欢,我知道这一点,但我只是想确保我没有遇到一个小小的PHP直觉怪癖" - 谢谢哈哈! (5认同)

GWW*_*GWW 11

我不确定我完全理解你在问什么,但你可以从孩子的构造函数中调用parent构造方法

parent::__construct();
Run Code Online (Sandbox Code Playgroud)

这是我所知道的唯一选择.


Ann*_*rom 5

通话parent::__construct()a::__construct()

class a extends b
{
   public function __construct()
   {
       parent::__construct();
   }   

   public function validateStuff()
   {
      $this->insert_record();
   }
}
Run Code Online (Sandbox Code Playgroud)

如果您不做任何特定于 a 的事情,您可以完全省略 a 的构造函数。