Подтвердить что ты не робот

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;
   }
}
4b9b3361

Ответ 1

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

class a extends b { 
} 

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

$x = new a();

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

Ответ 2

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

parent::__construct();

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

Ответ 3

Вызвать parent::__construct() в a::__construct():

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

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

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