PHP-Log-Klasse: neu oder global?

suntrop

Erfahrenes Mitglied
Hallo. Ich verpackte mal zwei Fragen hier in das Thema.

Ich habe eine Klasse die Fehler-Logs erstellt. Wenn ich mit write() ins Log schreibe geht alles einwandfrei. Wenn ich jedoch in einer anderen Funktion oder in einer anderen Klasse write() aufrufe, dann gehts nicht.

Jetzt stellt sich mir die Frage: Soll ich eine zweite Instanz mittels
PHP:
$phpLogger = PHPLogger::getInstance();
$phpLogger->write("Beispiel", INFO, "Info-Logging");
aufrufen oder soll ich das einmal erstellte $phpLogger global machen? Letzteres soll kein guter Programmierstil sein (mukelt man). Die erstgenannte Variante ergibt bei mir jedoch die Nachricht:
Code:
Notice: Object of class PHPLogger could not be converted to int in /ordner/php/classes/phpLogger.class.php on line 79

phpLogger.class.php (ab Zeile 78)
PHP:
	public static function getInstance() {
		if (PHPLogger::$instance == 0) {
			PHPLogger::$instance = new PHPLogger();
		}
		return PHPLogger::$instance;
	}

Was ist sinnvoller? Überall neue Instanzen erstellen oder einmal in der config.php instantiieren und das Objekt global verfügbar machen?

Danke euch für die Hilfe!
Grüße suntrop
 
Die Klasse PHPLoffer ist wohl ein Singleton und deswegen wird durch den aufruf von
$phpLogger = PHPLogger::getInstance();
keine neue Instanz erstellt sondern die alte wird ausgegeben.
Die Variante kannst du ruhig benutzen.

Wenn du mehrer Klassen global verfügbar haben willst, könntest du das Registry-Pattern verwenden.
 
Zu deinem Fehler.

Ändere mal

PHP:
if (PHPLogger::$instance == 0) { 
            PHPLogger::$instance = new PHPLogger(); 
}

zu

PHP:
if (PHPLogger::$instance === NULL) { 
            PHPLogger::$instance = new PHPLogger(); 
}
und probiere es dann nochmal
 
Das mit dem Singelton ist mir später auch aufgefallen, war mir aber nicht ganz sicher. Ich steige (schon seit geraumer Zeit ;-) ) in die OO ein. Vom Registry-Pattern hatte ich schonmal gelesen, werde mir das mal genauer ansehen, wenn das weiterhilft. Ähnliche Situationen entstehen immer wieder :-)

Danke für die Hilfe mit der Fehlermeldung. Hat funktioniert. Jetzt wird geloggt, auch ohne Notice.

Grüße
suntrop
 
Zurück