tutorials.de Buch-Aktion 05/2012
Like Tree3Danke
  • 1 Beitrag von wod2008
  • 1 Beitrag von eternitysoft
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
699
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von suntrop
    suntrop suntrop ist offline Mitglied Brokat
    Registriert seit
    Dec 2001
    Ort
    Köln
    Beiträge
    452
    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-Code:
    $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 :
    1
    
    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-Code:
        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
     

  2. #2
    wod2008 wod2008 ist offline Mitglied Gold
    Registriert seit
    Nov 2007
    Beiträge
    140
    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.
    suntrop bedankt sich. 

  3. #3
    eternitysoft eternitysoft ist offline Mitglied Silber
    Registriert seit
    Dec 2004
    Beiträge
    81
    Zu deinem Fehler.

    Ändere mal

    PHP-Code:

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

    zu

    PHP-Code:

    if (PHPLogger::$instance === NULL) { 
                
    PHPLogger::$instance = new PHPLogger(); 

    und probiere es dann nochmal
    suntrop bedankt sich. 

  4. #4
    Avatar von suntrop
    suntrop suntrop ist offline Mitglied Brokat
    Registriert seit
    Dec 2001
    Ort
    Köln
    Beiträge
    452
    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
     

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 23.02.10, 15:35
  2. Global Key Hook ist nicht global
    Von Andreas_0815 im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 04.11.07, 19:18
  3. Klasse global für alle SWFs nutzen
    Von p-flash im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 24.09.07, 15:29
  4. Fabrikmuster oder abstrakte Klasse?
    Von daddz im Forum PHP
    Antworten: 7
    Letzter Beitrag: 19.10.06, 13:09
  5. Funktion oder Klasse?
    Von fLoOmY im Forum PHP
    Antworten: 6
    Letzter Beitrag: 11.11.01, 21:22

Stichworte