Montag, 25. September 2006

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

Ö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!

  1.  
  2. <?php
  3. session_start();
  4. $_SESSION['zahl'] = 42;
  5. $_SESSION['string'] = 'Foobar';
  6. $_SESSION['object'] = new Foo();
  7. ?>
  8.  

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!

  1.  
  2. <?php
  3. class Foo {
  4.         public function bar() {
  5.                 echo __METHOD__;
  6.         }
  7.        
  8. }
  9. ?>
  10.  
Script, dass den incomplete object Fehler erzeugt

Download Code!

  1.  
  2. <?php
  3. session_start();
  4. require_once('Foo.php');
  5. if(isset($_SESSION['object'])) {
  6.         $foo = $_SESSION['object'];
  7.         $foo->bar();
  8. }
  9.  
  10. $_SESSION['object'] = new Foo();
  11. print_r($_SESSION);
  12. ?>
  13.  

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!

  1.  
  2. <?php
  3. require_once('Foo.php');
  4. session_start();
  5. if(isset($_SESSION['object'])) {
  6.         $foo = $_SESSION['object'];
  7.         $foo->bar();
  8. }
  9.  
  10. $_SESSION['object'] = new Foo();
  11. print_r($_SESSION);
  12. ?>
  13.  
Geschrieben von Mr.Foo in Probleme und Lösungen um 12:16
Kommentare (9) | Trackbacks (0)
Tags für diesen Artikel: Probleme und Lösungen
  1. Nicht gut
  2. Uninteressant
  3. Neutral
  4. Gut
  5. Sehr gut
Bewertung: keine, 0 Stimme(n) 85 Klicks

Trackbacks
Trackback für spezifische URI dieses Eintrags

Keine Trackbacks

Kommentare
Ansicht der Kommentare: (Linear | Verschachtelt)

Philipp - #1 - 02.07.2007 23:03 - (Antwort)

ahh, danke dafür!
Hatte schon fast angenommen, dass ich in einer Session keine Objekte speichern kann! :-)

Mr. Foo - #2 - 05.07.2007 00:24 - (Antwort)

Hallo Phillip,
prinzipiell kann alles in eine Session geschrieben werden.

Christian - #3 - 29.07.2008 15:27 - (Antwort)

Ich danke dir vielmals Mr. Foo! Nach 4h Fehlersuche hab ich dann nach
"The script tried to execute a method or access a property of an incomplete object." gegoogelt^^ (Hätte ich wohl früher machen sollen)

Mr. Foo - #3.1 - 29.07.2008 17:45 - (Antwort)

Mr. Foo sagt:

Wenn du nicht weiter weisst, weiss es vielleicht Mr. Foo :-)

... Spass, die Hauptintension des Blogs ist auch anderen zu helfen, denn Probleme tauchen niemals einmalig im Universum auf.

SHP - #4 - 27.10.2009 11:47 - (Antwort)

Hmm... das kann so eigentlich nicht stimmen, würde ich behaupten.
Ggf. hat sich mit PHP 5 was geändert?
Ich habe jedenfalls zwei Objekte nach start_session() angelegt und eins funktioniert, das andere nicht.

Es muss also noch nen Grund geben.
Kann mir jemand helfen?

Mr. Foo - #4.1 - 27.10.2009 15:44 - (Antwort)

Welche zwei Objekte hast du denn? Ist eins davon ein vielleicht ein PHP internes Objekt? Wenn ja ist das die Lösung.

Ansonsten kann ich dir nur helfen, wenn du mir den entsprechenden Codeteil zeigst, oder ein Beispiel erstellst.

Cyrixx - #5 - 17.12.2009 09:22 - (Antwort)

Danke für diesen Beitrag. Die Lösung war so einfach und ich hab sie nicht gesehen. Aber dafür gibt es ja nette Leute die es soetwas veröffentlichen.

k4l - #6 - 10.03.2010 13:27 - (Antwort)

danke ist eigtl absolut logisch :-)

Markus - #7 - 27.05.2010 12:25 - (Antwort)

Es gibt auch Fälle wo man nicht weiß welche Klassendefinition man vor dem session_start() einbinden muss. Generell hilft ein Autoloader gegen diesen Fehler.


Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Sie können [geshi lang=LANG][/lang] Tags verwenden um Quellcode abhängig von der gewählten Programmiersprache einzubinden
 
 

Mr. Foo

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

  • Homepage

Suche

Kategorien

  • C-Sharp (4)
  • Datenbank (25)
  • Delphi (2)
  • Entwicklung (33)
  • Flash (4)
  • Games (10)
  • Gutscheine (3)
  • Hardware (14)
  • HTML CSS (13)
  • Internet (79)
  • Java (31)
  • Javascript (22)
  • Linkdump (9)
  • Linux (93)
  • Low-Level (9)
  • Lua (8)
  • Musik (7)
  • Netzwerk (24)
  • New World Order (91)
  • Perl (3)
  • PHP (113)
  • Magento (5)
  • Symfony (3)
  • Zend Framework (7)
  • Probleme und Lösungen (26)
  • Python (22)
  • Ressourcen (22)
  • Sicherheit (76)
  • Software (47)
  • Sonstiges (43)
  • Own Stuff (34)
  • Spass (42)
  • Technik / Wissenschaft (3)
  • Tips (15)
  • Weisheiten (10)
  • Windows (22)


Alle Kategorien

Archive

  • September 2010
  • August 2010
  • Juli 2010
  • Das Neueste ...
  • Älteres ...

Blog abonnieren

  • XML RSS 0.91 feed
  • XML RSS 1.0 feed
  • XML RSS 2.0 feed
  • ATOM/XML ATOM 0.3 feed
  • ATOM/XML ATOM 1.0 feed
  • XML RSS 2.0 Kommentare

Tagcloud

Datenbank Entwicklung Internet Java Javascript Linux Lösung Netzwerk News New World Order PHP Problem Probleme und Lösungen Python Sicherheit Software Sonstiges Spass Update Windows

Kommentare

Uli zu UML-Diagramme aus Java-Klassen generieren – Java2UML
Mi, 08.09.2010 10:33
Auch von mir vielen Dank für deine [...]
Jan Sörensen zu Sehr guter DHTML Open Source Kalender
Mi, 08.09.2010 10:22
Warum ist kein Screenshot dabei??? [...]
Freeman zu Google Analytics und Adsense blocken
Mo, 06.09.2010 20:54
Da die Datei keine richtige Dateie [...]
Mr. Foo zu Plugin-container.exe deaktivieren
Mo, 06.09.2010 11:32
Hast du denn den Firefox neugestartet?
gotschenk zu Plugin-container.exe deaktivieren
So, 05.09.2010 22:59
Super post! Seit dem Update von Fi [...]

Beliebte Einträge

  • Magento ist scheisse (123)
  • C compiler cannot create executables unter Debian (51)
  • Sicheres Kontaktformular mit PHP - Spam verhindern (37)
  • Option Bug im Internet Explorer bei Nutzung von innerHTML und Javascript (24)
  • Es konnte keine TCP/IP-Verbindung mit dem Host hergestellt werden (24)
  • Scheiss Linux - USB-Platte viel zu langsam (wenns mal funktioniert) (23)
  • Zend Studio - Javaw.exe lastet die CPU aus (21)
  • UML-Diagramme aus Java-Klassen generieren – Java2UML (21)
  • USB-Tastatur funktioniert nicht (beim Booten) (18)
  • CSS: Hover-Effekt beim Internet Explorer in Tabellen (17)

Umfragen


Archive
 

Kontakt