2009-04-24 6 views
0

$this->a->b->c->d calling methods from a superclass in phpAufruf Geordnete Klasse von Sub-Klasse PHP

Ive eine Frage auf diesen Link, fragte ich habe Problem mit diesem tecnique Ich bin in der Lage, die Unterklassen von einer Klasse

wie diese

$ anrufen chesterx-> db-> query();

Ich will tun, eine andere Klasse von Unterklasse

für

Beispiel erhalten

i abfragen möchten auszuführen, die von der SQL-Klasse

  ROOT 
      | 
sql <--- chesterx ---> db 

ich möchte die SQL-Klasse von db verwenden hinzukam

das problem ich kann nicht die chesterx-klasse von db klasse

/bearbeiten/

Ich habe einige Klassen wie Nachrichten, Mitglieder, Kategorien, db und Abfrage

und ich habe es wie die Verbindung, die

public function __construct zum Thema oben war ({)

function __construct(){ 
     if(!$this->db){          
       include(ROOT."/func/class/bp.db.class.php"); 
       $this->db = new db; 
      } 
if(!$this->chester){           
       include(ROOT."/func/class/bp.chester.class.php"); 
       $this->db = new chester; 
      } 
     } 

i genannt db Klasse mit diesem Code und jetzt kann ich die db Klasse Methoden aufrufen und verwenden auch

zum Beispiel

ich will von db

ein Verfahren verwenden, das Verfahren einen Wert enthält, die

ein Daten aus der chester Klasse Methode zurückkehrt Ich wünsche, ich mich /klären war bearbeiten/

ist es sowieso, dies zu tun?

+0

Sie genannt Ich muss deine Frage ein wenig anders formulieren. Ich verstehe es nicht wirklich. –

+0

Sorry, ich habe keine Ahnung, wonach du fragst ... könntest du das klären? – Greg

+0

Einverstanden, ein Codebeispiel wäre hier sehr hilfreich. – Rob

Antwort

3

finde ich Ionut G. Stan Lösung gut für Ihren Fall, aber Sie mögen vielleicht auch die factory/singleton pattern betrachten, obwohl es nur gut, wenn Ihre chesterx Klasse ein globales ist, und nur einmal

3

Das folgende Snippet könnte eine Lösung sein, obwohl ich die zirkuläre Referenz nicht wirklich mag. Probieren Sie es aus und verwenden Sie es, wie Sie es für richtig halten. Und übrigens, was Sie Klasse und Unterklasse nennen, sind eigentlich enthält und enthalten Klasse.

class Database 
{ 
    public $chesterx; 

    public function __construct($chesterx) 
    { 
     $this->chesterx = $chesterx; 
    } 
} 

class Sql 
{ 
    public $chesterx; 

    public function __construct($chesterx) 
    { 
     $this->chesterx = $chesterx; 
    } 
} 

class Chesterx 
{ 
    public $db; 

    public $sql; 

    public function __construct() 
    { 
     $this->db = new Database($this); 
     $this->sql = new Sql($this); 
    } 
}