Hello,
Bitte private. Das Singleton-Pattern lässt keine Vererbung zu, also braucht es kein protected.
Das hab ich ja schon so vorgeschlagen. Die Methode connect() sollte private sein. Alle Methoden, die einen Connect voraussetzen, rufen connect() auf. connect() baut die Verbindung auf, wenn sie noch nicht steht und ansonsten macht sie nichts. Die Zugangsdaten kann sie sich entweder von Klassenvariablen holen, die ganz am Script-Anfang, also noch vor jeglicher Verwendung von db_singleton(), gesetzt wurden, oder sie holt sie sich aus einer definierten (z.B. ini-File).
Also soll ich den Connect nicht automatisch mit dem Aufruf des Singleton machen? Weil ich mein, wenn ich das Singleton aufbaue, dann will ich auch die Verbindung haben. Logisch.
MMn solltest Du das ruhig tun.
Du benötigst also eine Methode init(), die den Anfangszustand herstellt und z.B. die Zugangsdaten und weitere Voreinstellungen aus einem _extra_ ini-File beschafft. Dafür hat PHP die Funktion parse_ini_file() http://www.php.net/manual/de/function.parse-ini-file.php
Dann benötigst Du die Methode connect(), die mit den beschafften Daten die Verbindung aufbaut.
Beide kannst Du im Konstruktor aufrufen, natürlich connect() nur, wenn init() geklappt hat.
Also soll die Zuweisung in der ini stattfinden.
Sprich es steht dort z.b. drin:db->_db_host="localhost";
? Oder wie?
siehe Doku zu parse_ini_file
Ich habe übrigens noch nie ausprobiert, ob man in einer Klasse ein Array auch als private anlegen kann, das auszuprobieren wäre doch eine gute Übung für Dich :-))
Die Zugangsdatenvariablen sind ja static also müsste das doch so gehen.
Ich sehe nicht, warum die static sein müssen. MMn reicht da private aus. Es gibt ja sowieso nur eine Instanz von der Klasse. Und wenn Du Dir das später mal anders überlegen solltest, bräuchtest Du dann nur den Konstruktor wieder public machen, oder z.B. im Singleton Arbeitsbereiche einrichten, wenn Du darüber die Anzahl nur beschränken willst. Static ist also für diese Daten definitv falsch!
Die Werte kann ich ja aufgrund des "static" übergeben bevor das Singleton geholt wird.
Wie willst Du das machen? Willst Du sie hard codieren? Dann stehen sie sichtbar in der Klasse.
Liebe Grüße aus dem Cyberspace
Tom vom Berg