Artikel mit dem Tag "Session"

The script tried to execute a method or access a property of an incomplete object

Eben ist mir ein banaler Fehler unterlaufen, der mich jedoch ziemlich zum Haare Raufen gebracht hat.

Ich war dabei, Quellcode auszulagern, der unter anderem folgendes enthielt:

require_once("class_user.php");
session_start();
ob_start();
if(!is_object($_SESSION["user"])) $_SESSION["user"] = new user();

Nach einem Login wurde in der Session ein User-Objekt gespeichert mit Werten wie Nickname, Passwort, Gruppenzugehörigkeiten usw.

Die wenigen Codezeilen oben überprüften bei jedem Aufruf der Seite, ob ein User-Objekt in der Sitzung vorhanden war. Wenn nicht, wurde eins mit den Standardwerten (kein Nickname, kein Passwort, keine Gruppen) erstellt.

Nach Auslagern des Quellcodes spuckte PHP folgende Meldung aus:

The script tried to execute a method or access a property of an incomplete object.

Da ich zu faul zum Googeln war und es meiner Meinung nach auch überhaupt nicht sein konnte, dass es zu einem Fehler kam, da ich den Code nicht verändert, sondern nur ausgelagert hatte, verbrachte ich einige Minuten mit Debugging, bis ich dann nach erfolgloser Fehlersuche doch Google damit fütterte.

Die Lösung fand ich letztendlich hier:

Da die Klasse Foo erst nach dem Starten der Session eingebunden wird, kennt PHP die Klasse noch nicht, die sich in der Session-Variablen $_SESSION[‚object‘] befindet.
Auf mein Problem übertragen bedeutete das, dass dem PHP Interpreter die Klasse user noch nicht bekannt war, als er dazu angewiesen wurde, eine Instanz davon aus der Session zu überprüfen.
Den obigen Codezeilen nach wurde die Klassendefinition von user jedoch vor der Intialisierung der Session geladen.

Ein Blick auf den neuen ausgelagerten Code zeigte dann aber, dass ich die Reihenfolge der Session-Intialisierung und der Einbindung der Klassendefiniton vertauscht und somit den Fehler provoziert hatte.

session_start();
ob_start();
require_once("class_user.php");

Sollte also jemals der Fehler The script tried to execute a method or access a property of an incomplete object in einem Script vorkommen, so bietet sich an, als allererstes zu überprüfen, ob die Definition des Objektes vor dessen Intialisierung erfolgte!

Share
Geschrieben von Philip Ehret am 03.08.2009 | Kommentare weiterlesen...