2012-04-07 19 views
0

Ich möchte zuerst eine neue Instanz einer Basisklasse erstellen und dann innerhalb dieser Basisklasse eine neue Instanz einer Unterklasse erstellen können. Ich möchte auch in der Lage sein, Basisklassenmethoden innerhalb der Unterklasse aufzurufen. Ich habe es mit dem Code unten versucht und es funktioniert wie ich will, aber ist das eine schlechte Übung und ist es speichereffizient? Irgendwelche anderen Kommentare?Erstellen einer neuen Instanz einer Unterklasse innerhalb einer Basisklasse

<?php 
class BaseClass { 
    private $subclass = NULL; 
    function __construct() { 
     print "In BaseClass constructor<br>"; 
     $this->subclass = new SubClass(); 
    } 
    function sayhello() { 
    print 'hello from base class'; 
    } 
} 

class SubClass extends BaseClass { 
    function __construct() { 
     print "In SubClass constructor<br>"; 
     $this->sayhello(); 
    } 

    function saygoodbye($num) { 
    print 'goodbye from base class'; 
    } 
} 

$SUB = new SubClass(); 
?> 

Meine Absicht, dies zu tun war in der Lage sein, alles für den Zugriff durch $this-> verwenden, wie, wie CodeIgniter funktioniert. Dies ist, was ich in der Datei index.php für meine private API habe. Ich möchte in der Lage sein, die API-Anfrage vor dem Aufruf von call_user_func_array() zu authentifizieren. Ich muss mich auch mit einer Datenbank für die Authentifizierung verbinden, aber ich möchte auch von der Unterklasse auf die Datenbank zugreifen können. Im Wesentlichen ermittelt der Code, welche API-Methode aufgerufen wird, erstellt dann eine Instanz der Unterklasse und ruft schließlich die Methode auf.

+0

Warum muss BaseClass eine Eigenschaft der Unterklasseninstanz haben? – xdazz

+0

Welchen möglichen Grund benötigen Sie die in der Basisklasse gespeicherte Unterklasse? Es ist eine schlechte Übung und scheint dir nichts zu geben, was du nicht schon hättest. – clexmond

+0

Es war eine der Möglichkeiten, eine REST-API für meine Website zu erstellen, aber ich werde nur von mir verwendet. Ursprünglich hatte ich es eingerichtet, um eine neue Instanz der Unterklasse zu erstellen, dann kann der Unterklassenkonstruktor den Basisklassenkonstruktor aufrufen. Um dann die Unterklassenmethode aufzurufen, habe ich call_user_func_array() verwendet. Ich versuche, einfache Authentifizierung mit einem API-Schlüssel zu implementieren, der nur überprüft, ob es in der Datenbank vorhanden ist. Grundsätzlich enthält die Unterklasse alle einzelnen Methoden, die aufgerufen werden können, und die Basisklasse enthält Methoden wie sendResponse(). – musubi

Antwort

0

Ich sehe keine Effizienz Problem geben Sie Ihren aktuellen code.Es hängt von PRAKTISCHEN Situationen. Wenn Sie fragen, ob es zulässig ist oder nicht, ist das auch Design-Problem. Means hängt von der PROBLEM-DOMAIN ab. Anstatt solche Fragen zu stellen, sollten Sie sich mit design patterns vertraut machen.

Das Verständnis von Entwurfsmustern gibt Ihnen einen Einblick in die Art und Weise, wie Design- und Architekturprobleme standardmäßig behandelt werden und wie eine bestimmte Programmiersprache diese Probleme anspricht.

Verwandte Themen