2012-03-24 3 views
0

Ich habe 2 Klassen wie folgt aussehen:Arbeiten mit erweiterten Klassen in PHP

class db { 

    protected $db; 

    function __construct() { 
     $this->connect(); 
    } 

    protected function connect() { 
     $this->db = new MySQLi(db_host, db_user, db_pass, db_name) or die($this->db->error); 
     $this->db->set_charset('utf8'); 
    } 

} 

und

class sample extends db { 

    protected $js_base_dir; 

    public function __construct($js_base_dir = js_dir) { 
     $this->js_base_dir = $js_base_dir . "/"; 
    } 
.... 

möchte ich db innen zweiter Klasse $ this-> verwenden, aber __construct in sample Klasse Überschreibt die Konstruktfunktion der ersten Klasse. Wie bekomme ich $ this-> db in der zweiten Klasse? Habe ich etwas falsch gemacht? wenn ja, was ist richtig?

+1

Ihr Code sagen, dass "Beispiel ist eine Datenbank" .. was falsch klingt –

Antwort

0

Try this:

public function __construct($js_base_dir = js_dir) { 

    parent::__construct(); 

    $this->js_base_dir = $js_base_dir . "/";   
} 
+0

Ich frage mich, ob es richtig ist? Kann ich auf diese Weise neue Klassen erstellen? – heron

+0

Nichts wird sich ändern, außer dass Ihre Kindklasse (Sample) ihren Elternkonstruktor aufruft, der '$ this-> db' initialisiert. Ihr Anrufcode ändert sich NICHT. –

+0

Fanden Sie diese Antwort hilfreich? –

3

Sie können übergeordnete Klasse-Methode aufrufen, parrent::methodName() verwenden. Ebenso können Sie diese Konstruktor-Methode des aufzurufen verwenden Eltern sowie

parent::__construct(); 

Verbrauch:

public function __construct($js_base_dir = js_dir) { 
    parent::_construct(); 
    $this->js_base_dir = $js_base_dir . "/"; 
} 

Neben dem manual lesen this Artikel für längere Erklärung.

+0

Ich frage mich, ob es richtig ist? Kann ich auf diese Weise neue Klassen erstellen? – heron

+0

@epic_syntax, Ja, ist es. – Starx

+0

@epic_syntax, Lesen Sie diesen Artikel (http://www.tuxradar.com/practicalphp/6/10/1), um die Dinge zu klären. – Starx