web-dev-qa-db-fra.com

PHP - étendu __Construction

Je me demandais si tu pouvais m'aider ..

J'ai deux classes, on étend l'autre. La classe B sera étendue par divers objets différents et utilisé pour les interactions de base de données communes .. Maintenant, je voudrais que la classe B de la classe B de gérer sa connexion et une déconnexion sans la direction de la classe A ou de toute entrée externe. .

Le problème de ce que je comprends est qu'une classe étendue fonctionnera automatiquement sa fonction __Construction. Y a-t-il un moyen de contourner cela?

Merci d'avance..

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

La méthode Parent __construct() définie dans la classe B s'exécutera automatiquement si vous instanciez la classe d'enfant A, sauf Il existe une méthode __construct() définie dans la classe A.

class a extends b { 
} 

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

$x = new a();

Si une méthode de __construct() est définie dans la classe A, cela remplace l'utilisation de la méthode __construct() en classe B .... Il fonctionnera au lieu de la classe 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();

Donc, si votre classe enfant a une méthode __construct() définie, vous devez appeler explicitement le constructeur pour le parent si vous souhaitez l'exécuter aussi.

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

Call parent::__construct() Dans a::__construct():

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

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

Vous pouvez tout d'omettre le constructeur de A si vous ne faites aucune matière spécifique.

4
Annika Backstrom