|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2004-09-05 13:47 UTC] andrey@php.net
Description:
------------
The idea is that when an object is unserialized and the class definition is still not loaded then it is converted to __PHP_Incomplete_Class class. From the dump of the actual result one can see that the name is stored in a member variable __PHP_Incomplete_Class_Name. So far everything looks ok. But when one tries to execute a method on incomplete class object it leads to a fatal error. This is also correct. However the name of the class is "unknown" is the message. This is not correct and the example works with PHP 4.3.8(cli). However does not work with current HEAD (probably not with the PHP_5 branch).
One additional thing is that the message is misleading. A serialized object may not come always from a session but can be loaded from a file by the user or ,like in my case where I found the error, from a socket.
Thanks
Reproduce code:
---------------
php -r 'class foo{function someFunc(){} var $someProp=2;}$a=serialize(new foo());$b=str_replace('foo','bar', $a);var_dump($c = unserialize($b));$c->someFunc();'
Expected result:
----------------
object(__PHP_Incomplete_Class)#1 (2) {
["__PHP_Incomplete_Class_Name"]=>
string(3) "bar"
["someProp"]=>
int(2)
}
Fatal error: Unknown: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition <b>bar</b> of the object you are trying to operate on was loaded _before_ the session was started in Command line code on line 1
Actual result:
--------------
object(__PHP_Incomplete_Class)#1 (2) {
["__PHP_Incomplete_Class_Name"]=>
string(3) "bar"
["someProp"]=>
int(2)
}
Fatal error: Unknown: The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition <b>unknown</b> of the object you are trying to operate on was loaded _before_ the session was started in Command line code on line 1
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Nov 03 01:00:01 2025 UTC |
Reopening this bug. Could reproduce it with PHP 5.0.5 on WinXP: >type test.php <?php class foo{function someFunc(){} var$someProp=2;}$a=serialize(new foo());$b=str_replace('foo','bar',$a);var_dum p($c = unserialize($b));$c->someFunc(); ?> >php test.php object(__PHP_Incomplete_Class)#1 (2) { ["__PHP_Incomplete_Class_Name"]=> string(3) "bar" ["someProp"]=> int(2) } Fatal error: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "bar" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in C:\Dokumente und Einstellungen\nohn_s\Desktop\php-5.0.5\test.php on line 2Yes, it is reproducible: C:\Dokumente und Einstellungen\nohn_s\Desktop\php5.1-win32-200510031830>php test.php object(__PHP_Incomplete_Class)#1 (2) { ["__PHP_Incomplete_Class_Name"]=> string(3) "bar" ["someProp"]=> int(2) } Fatal error: main(): The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "bar" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide a __autoload() function to load the class definition in C:\Dokumente und Einstellungen\nohn_s\Desktop\php5.1-win32-200510031830\test.php on line 2