PHP: Objekt ist gleich nach der Erstellung NULL

9

Wir haben sehr seltsame Fehler, die gelegentlich in unseren PHP-Protokollen : Trying to get property of non-object.

Dieser genaue Fehler scheint durch den Zugriff auf das Mitglied $shortName in der folgenden if-Anweisung verursacht zu werden:

%Vor%

Wenn ich self::$system in eine Protokolldatei dump, sehe ich, dass es NULL ist - direkt nach dem Erstellen mit dem Schlüsselwort new .

Der interessanteste Teil ist, dass diese Datei in jeder Anfrage auf unserer Seite enthalten ist, also ca. 10 mal pro Sekunde ausgeführt wird. Aber manchmal scheitert es einfach, ohne dass jemand den Code (oder gar den Server) berührt.

Hat jemand anderes jemals ein solches Verhalten in PHP erlebt?

    
soulmerge 21.10.2010, 16:27
quelle

6 Antworten

1

Wir haben schließlich herausgefunden, dass wir in den PHP-Fehler # 50027 geraten sind. Nachdem die php.ini-Variable zend.enable_gc auf false gesetzt wurde, verschwand der Fehler.

    
soulmerge 20.12.2010, 15:45
quelle
1

Danke für alle Updates. (siehe ausführliche Kommentare oben zum Originalbeitrag).

Leider bin ich so ratlos wie du bist - mit diesem Code sieht alles gut aus.

Entweder

  1. Sie haben einen ziemlich obskuren Fehler in PHP oder ...
  2. gefunden
  3. die Symptome bringen dich dazu zu glauben, dass das Problem an einem Ort ist, wenn es irgendwo anders ist, oder ...
  4. Wir sind all etwas in diesem Code fehlt, die für eine Reihe von erfahrenen PHP-Entwickler offensichtlich sein sollte. ; -)

Wenn ich mit meinem Produktionssystem umgehen müsste, würde ich das return NULL im Konstruktor auskommentieren und es für eine Weile in der Produktion laufen lassen. Das return sollte nicht Probleme verursachen, aber es ist das einzige komische Ding, das ich hier sehen kann.

Entschuldigung, ich kann nicht mehr als das helfen. Bitte komm zurück und lass es uns wissen, wenn du es herausgefunden hast.

    
Lee 30.11.2010 17:12
quelle
0

Versuchen Sie den Singleton-Ansatz:

%Vor%

und sehen Sie, was der Wert von $ self ist

Ihr Problem scheint von einem Überschreiben zu kommen oder nur weil Sie die $ system Variable nicht setzen

Mit der Singleton-Methode stellen Sie sicher, dass die Instanz nur einmal gesetzt wurde und nichts überschreibt.

ps. Was macht die Datei eigentlich?

    
Timo Huovinen 21.10.2010 16:53
quelle
0

Was ist diese Zeile:  self :: $ system- & gt; shortName = strtolower (Gebietsschema :: getRegion ($ rfcName)) ;? Woher kommt der $ rfcName? Wenn es nicht definiert wird, bevor Sie versuchen, es zu verwenden, würde dies zu einem Fehler führen, der den Rest des Codes zum Scheitern bringt und Ihnen das Problem gibt, das Sie beschreiben.

Da ich Ihre gesamte Klasse nicht sehen kann, habe ich nicht alle Informationen, um die Frage zu beantworten, also ist dies nur eine Vermutung

    
Dmitri 29.11.2010 01:11
quelle
0

Dadurch wird das Objekt einmal gedruckt

%Vor%     
Manu 30.11.2010 11:35
quelle
-1

Ich bin mir nicht sicher, ob Sie das herausgefunden haben, aber ich würde versuchen, das neue Objekt direkt einer Variablen zuzuweisen und es später self :: $ system zuzuweisen. Etwas wie der folgende Code kann helfen.

%Vor%     
oreX 26.11.2010 00:54
quelle

Tags und Links