session & obect : session_start and require_once - Incomplete object

From: Date: Tue, 08 Jan 2002 09:54:19 +0000
Subject: session & obect : session_start and require_once - Incomplete object
Groups: php.general 
Request: Send a blank email to php-general+get-79773@lists.php.net to get a copy of this message
Hi, I have problem accessing object stored in session with PHP. SUMMARY ************* The doc says I must put the object definition (require_once("MyObject.php");) before the session starts (with a session_start() ). If I do that - OK I can get my object from session - OK my object is "casted" in MyObject object type SAMPLE / the problem *************************** But my code is organised in several sub-scripts (Object oriented, simplified dor the explanation) : The request.php is performed through part_1.php and part_2.php with 2 include calls - request.php starts the session and do some initialization stuff. - include("part_1.php") do some business things here call some object and try to read them from session - include("part_2.php") do some other logic here end the response sent to the browser As you already understand, the session starts BEFORE PHP enters part_1.php and it is too late in part_1.php to put the object definition with the require_once. I cannot re organise my php files, since part_1.php is as its own business logic and I want to use it elsewhere. The object which is thus restored from session is not "finished". If I do a var_dump on it I have something like : object(__PHP_Incomplete_Class)(3) { ["__PHP_Incomplete_Class_Name"]=> string(6) "classe" ["n"]=> int(1) ["sub"]=> object(__PHP_Incomplete_Class)(2) { ["__PHP_Incomplete_Class_Name"]=> string(9) "subclasse" ["i"]=> int(1) } } instead of object(classe)(2) { ["n"]=> int(1) ["sub"]=> object(subclasse)(1) { ["i"]=> int(1) } } It looks like there is a special intermediate object of type __PHP_Incomplete_Class. If another object is an attribut of the session stored object, it is also incomplete. If I try to call some methods on it it throws an error saying the object is incomplete and I cannot call methods or attributs on it. TEMPORARY SOLUTION ****************************** What I do actually is making a kind of copy of this object trough introspection and explicit casting : $myObject =& convert("MyObjet", $IncompleteClassInstance) ; But : - this is not very convenient - the MyObject must support a constructor with no arguments since the process of conversion is : * create a new instance of MyObject with no arguments (new MyObject( ); ) * copy the attributes of the incomplete instance in this new Instance recurse if an attribute is itself another object * return the new instance QUESTIONS *************** Any idea about standard object casting in PHP ? The process between class def and session starting if my session is auto started (change in my php.ini) results in an error. Thus I can affirm there is a bug in the session handling of PHP :"It is not possible to store object in session if we use auto started sessions" Alex

« previous php.general (#79773) next »