40

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

2つのクラスがあり、1つはもう1つを拡張します。クラス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;
   }
}
4

3 に答える 3

101

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

class a extends b { 
} 

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

$x = new a();

メソッドがクラスaで定義されている場合、__construct()これはクラスbでのメソッドの使用をオーバーライドします。クラスbメソッドの代わりに__construct()実行されます。__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();
于 2010-08-13T14:01:34.967 に答える
13

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

parent::__construct();

それが私が知っている唯一のオプションです。

于 2010-08-13T13:29:04.477 に答える
5

電話parent::__construct()a::__construct()

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

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

特定のことをしていない場合は、のコンストラクターを完全に省略できます。

于 2010-08-13T13:29:36.100 に答える