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.  
Bewertung: 4.67 von 5, 3 Stimme(n) 2356 Klicks
Probleme und Lösungen
Von Mr.Foo in Probleme und Lösungen am 25.09.06@12:16 Uhr

Trackbacks
Trackback für spezifische URI dieses Eintrags

Keine Trackbacks

10 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.

pezzo - #8 - 10.11.2010 23:47 - (Antwort)

dieser post hat mir sicher einige minuten-stunden erspart- danke!


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

  • Android (2)
  • C-Sharp (4)
  • Datenbank (29)
  • Delphi (2)
  • Entwicklung (36)
  • Flash (5)
  • Games (10)
  • Gutscheine (4)
  • Hardware (14)
  • HTML CSS (15)
  • Internet (88)
  • Java (32)
  • Javascript (24)
  • Linkdump (9)
  • Linux (101)
  • Low-Level (10)
  • Lua (8)
  • Musik (9)
  • Netzwerk (25)
  • New World Order (109)
  • Perl (3)
  • PHP (129)
  • Magento (5)
  • Symfony (3)
  • Zend Framework (7)
  • Probleme und Lösungen (26)
  • Python (22)
  • Ressourcen (23)
  • Sicherheit (91)
  • Software (60)
  • Sonstiges (47)
  • Own Stuff (48)
  • Spass (45)
  • Technik / Wissenschaft (4)
  • Tips (15)
  • Weisheiten (17)
  • Windows (23)
  • Wort des Tages (15)


Alle Kategorien

Archive

  • Mai 2012
  • April 2012
  • März 2012
  • Das Neueste ...
  • Älteres ...

Abonnieren lohnt sich!

  • XML RSS 2.0 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 Sicherheit Software Sonstiges Spass Tipp Update Windows

Beliebte Einträge

  • Magento ist scheisse (197)
  • Plugin-container.exe deaktivieren (107)
  • BWin Betrug und Abzocke bei Minigames? (64)
  • C compiler cannot create executables unter Debian (53)
  • Scheiss Linux - USB-Platte viel zu langsam (wenns mal funktioniert) (43)
  • Sicheres Kontaktformular mit PHP - Spam verhindern (37)
  • UML-Diagramme aus Java-Klassen generieren – Java2UML (28)
  • Es konnte keine TCP/IP-Verbindung mit dem Host hergestellt werden (28)
  • Option Bug im Internet Explorer bei Nutzung von innerHTML und Javascript (24)
  • Zend Studio - Javaw.exe lastet die CPU aus (24)

Kommentare

Oliver Riske zu Es konnte keine TCP/IP-Verbindung mit dem Host hergestellt werden
Di, 15.05.2012 20:38
Super Danke!
anon zu BWin Betrug und Abzocke bei Minigames?
Sa, 05.05.2012 18:43
ihr scheiss betrüger
Jürgen zu Unable to elevate error:1814 VLC Problem
Mi, 02.05.2012 16:54
So einfach ist es bei mir jedenfal [...]
Jonny zu BWin Betrug und Abzocke bei Minigames?
Di, 24.04.2012 13:56
Ihr seid fast alle BERTS. Kein Pla [...]
Johnny zu Plugin-container.exe deaktivieren
Sa, 21.04.2012 18:30
Cooler Trick! MFG Johnny
 

Kontakt/Informationen