web-dev-qa-db-ja.com

PHP-拡張__construct

あなたが助けてくれないかと思っていました。

私は2つのクラスがあり、一方がもう一方を拡張しています。 。

私が理解していることからの問題は、拡張されたクラスが__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;
   }
}
33
Lee

子クラスaをインスタンス化すると、クラスbで定義された親__construct()メソッドが自動的に実行されますnlessクラスaで定義された__construct()メソッドがある場合。

_class a extends b { 
} 

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

$x = new a();
_

__construct()メソッドがクラスaで定義されている場合、これはクラスbでの__construct()メソッドの使用をオーバーライドします...実行されますの代わりに=クラス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();
_

したがって、子クラスに__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();
_
77
Mark Baker

あなたが何を求めているのか完全に理解しているとは思いませんが、子のコンストラクターから親の構成メソッドを呼び出すことができます

parent::__construct();

それが私が知っている唯一の選択肢です。

11
GWW

parent::__construct()a::__construct()を呼び出す:

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

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

A固有の処理を行わない場合は、aのコンストラクタを完全に省略できます。

4