
Öfters bekommt man bei PHP die Fehlermeldung: The script tried to execute a method or access a property of an incomplete object.
Was kann man dagegen machen und warum passiert das?
Der PHP Session-Mechanismus ist eine sehr praktische Funktion, der zudem noch einfach zu Benutzen ist. In Sessions kann man alles mögliche ablegen. Beispielsweise Zahlen, String und Arrays. Es ist sogar möglich Objekte in einer Session abzulegen. Wie man den Session-Mechanismus nutzt, kann man in Listing 1 sehen.
Listing 1
Download Code!
<?php
$_SESSION['zahl'] = 42;
$_SESSION['string'] = 'Foobar';
$_SESSION['object'] = new Foo();
?>
Problem
Hier liegt der Knackpunkt. Es ist ganz entscheidend, wo man nun die Klasse Foo definiert. Bekommt ihr die Fehlermeldung: The script tried to execute a method or access a property of an incomplete object, dann habt ihr folgendes gemacht:
Klasse Foo in der Datei Foo.php
Download Code!
<?php
class Foo {
public function bar() {
}
}
?>
Script, dass den incomplete object Fehler erzeugt
Download Code!
<?php
require_once('Foo.php');
if(isset($_SESSION['object'])) { $foo = $_SESSION['object'];
$foo->bar();
}
$_SESSION['object'] = new Foo();
?>
Lösung
Warum gibt es hier nun einen Fehler?
Erst 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. Somit kommmt es dann auch zu der Fehlermeldung: The script tried to execute a method or access a property of an incomplete object.
Die Lösung ist demnach, die Klasse Foo vor der Initalisierung der Session einzubinden. Richtig ist der Code, folgendermaßen:
Download Code!
<?php
require_once('Foo.php');
if(isset($_SESSION['object'])) { $foo = $_SESSION['object'];
$foo->bar();
}
$_SESSION['object'] = new Foo();
?>