PHP - расширенная конструкция


Я хотел спросить, не могли бы вы мне помочь..

У меня есть два класса, один расширяет другой.. Класс 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;
   }
}
Author: Lee, 2010-08-13

3 answers

Родительский метод __construct(), определенный в классе b, будет выполняться автоматически, если вы создадите экземпляр дочернего класса a, , если только не существует метода __construct(), определенного в классе a.

class a extends b { 
} 

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

$x = new a();

Если метод __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();

Поэтому, если в вашем дочернем классе определен метод __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();
 67
Author: Mark Baker, 2010-08-13 14:01:34

Я не уверен, что полностью понимаю, о чем вы спрашиваете, но вы можете вызвать метод построения родителей из конструктора ребенка

parent::__construct();

Это единственный вариант, о котором я знаю.

 10
Author: GWW, 2010-08-13 13:29:04

Вызов parent::__construct() в a::__construct():

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

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

Вы можете вообще опустить конструктор a, если вы не занимаетесь какими-либо конкретными делами.

 4
Author: Annika Backstrom, 2010-08-13 13:29:36