2010-11-23 7 views
5

J'ai une classe PHP ainsi:Remplacer le constructeur de parent d'un parent en PHP

class DB extends mysqli{ 
    public function __construct(
     { 
     parent::__construct('localhost','user','password','db'); 
     } 
} 

Mon problème est que je veux passer outre cette classe avec une nouvelle qui effectue des opérations de base de données plus privilégiées avec un autre utilisateur db.

class adminDB extends DB{ 
    public function __construct(
     { 
     ?? 
     } 
    } 
} 

Que dois-je faire ici?

+1

Set Le fait de taper des informations d'identification de base de données particulières dans le constructeur est généralement une mauvaise idée. Si vous avez vraiment besoin de relier les informations d'identification de la base de données dans une classe, vous devez créer une méthode factory à la place, comme static fn create() {return new self ('localhost', ...); } – amik

Répondre

6

Vous devez transmettre les informations d'identification au constructeur de toute façon:

class DB extends mysqli { 
    public function __construct($host, $user, $password, $db) 
    { 
     parent::__construct($host, $user, $password, $db); 
    } 
} 

vous n'avez pas besoin héritage que vous pouvez simplement utiliser:

$adminDb = new DB($adminHost, $adminUser, $adminPassword, $db); 
$nonAdminDb = new DB($host, $user, $password, $db); 

Mais si vous voulez vraiment l'héritage que vous pouvez encore faire ceci:

class AdminDB extends DB { 
    public function __construct() { 
     parent::__construct('adminhost','adminuser','adminpassword','db'); 
    } 
} 
-1
<?php 
    class mohona{ 
     public $name; 
     public $age; 
     public $fname; 
     public $lname; 
     public function __construct($cname,$cage,$cfname,$clname){ 
      $this->name=$cname; 
      $this->age=$cage; 
      $this->fname=$cfname; 
      $this->lname=$clname; 


     } 
     public function getMohona(){ 
      echo "Full Name: ".$this->fname." ".$this->lname." ".$this->name."<br/>Age: ".$this->age."<br/>"; 
     } 
    } 
    class ibrahim extends mohona{ 
     public $relational_status; 
     public $relation; 
     public $contact; 
     public function __construct($cname,$cage,$cfname,$clname,$crelational_status,$crelation,$ccontact){ 
      parent::__construct($cname,$cage,$cfname,$clname); 
      $this->relational_status=$crelational_status; 
      $this->relation=$crelation; 
      $this->contact=$ccontact; 
     } 
     public function getIbrahim(){ 
      echo "Full Name: ".$this->fname." ".$this->lname." ".$this->name."<br/>Age: ".$this->age."<br/>"."Relational Status: ".$this->relational_status."<br/>Maritual Status: ".$this->relation."<br/>Contact Status: ".$this->contact; 
     } 
    } 
    $oMohona=new mohona("Mohona","20","Nafis","Anjum"); 
    $oIbrahim=new ibrahim("Ibu","25","Ibrahim","Akbar","Single","Unmarried","blocked"); 
    echo $oMohona->getMohona(); 
    echo $oIbrahim->getIbrahim(); 
?> 
+1

Vous devriez vraiment expliquer pourquoi cela résout le problème. –

Questions connexes