Ich habe eine Reihe von statischen Klassenmethoden. Ich habe auch eine bestehende Datenbankverbindung in einem Skript, das in einer Objektvariablen $ DB gespeichert ist. Wie rufe ich diese statischen Klassenmethoden auf und lasse sie das $ DB-Objekt verwenden, ohne diese Variable jedes Mal als Parameter der Klassenmethode übergeben zu müssen?PHP: Wie bestehende Datenbankverbindung zu statischen Klassenmethoden übergeben?
Zum Beispiel gerade jetzt bin ich mit einem global verwenden, leider:
class Foo {
public static function Bar() {
global $DB;
return $DB->DSN_STRING;
}
}
Es ist wie ich brauche, um meine statische Klasse selbst mit einer Routine aufzurufen, die irgendwie die $ DB-Verbindung bekommt, ohne mit stelle es wieder her. Hinweis: Ich kann es nicht in die statische Klasse einfügen, da es nicht instanziiert wird.
Natürlich ist das Problem gelöst, wenn ich von einer statischen Klasse zu einer regulären Klasse wechseln und mein $ Foo-Objekt instanziieren. Ich könnte dann die $ DB-Variable als Einstellung für eine öffentliche Variable injizieren. Oder fügen Sie eine öffentliche Methode hinzu, um die $ DB-Variable zu erhalten, und legen Sie dann eine private Variable des $ Foo-Objekts fest. Oder machen Sie einen Klassenkonstruktor, der die $ DB-Variable akzeptiert, und legen Sie eine private Variable des $ Foo-Objekts fest. Aber alle 3 Techniken erfordern, dass ich von einer statischen Klasse zu einer regulären Klasse wechseln.
Einige Leute haben etwas erwähnt, das ein Registrierungsmuster oder ein Singleton-Muster genannt wird (ich denke, es ist dasselbe? Nicht sicher). Ist das, was ich brauche, um dieses Problem effizient zu lösen?
Die Sache ist vor allem, dass ich vermeiden, "global $ DB" zu nennen, weil die Leute ausflippen.
Das war * GENAU *, was ich brauchte, und ich wusste nicht, dass eine statische Klasse eine Objektpersistenz darin aufrechterhalten konnte. – Volomike
Gute Zeiten mit Singletons. :) Ich bin froh, Ihnen helfen zu können. – zombat