NYCPHP Meetup

NYPHP.org

[nycphp-talk] Incomplete Objects, Class Definitions and require_once

Brent Baisley brenttech at gmail.com
Sun Aug 5 19:50:37 EDT 2007


I've never seen that error message before, but I think I understand  
what it is saying. It sounds like you are employing a technique that  
is generally frowned upon because of it's dependencies and  
complexity. Did you inherit this code from someone else?
Since it's complaining about objects loading before unserialize, I'm  
guessing you are passing serialized objects either through a session  
or directly through to other objects. An object is an instance of a  
class, you need to load the base class definition in order to create  
an instance of that class. What you are doing is passing an instance  
of a class without having the class loaded. The only way I know of  
doing this is by passing a serialized instance through a session.  
When it is unserialized, it doesn't have the base class available to  
restore the class object.
So, you must load (include) the class file before you try to  
unserialize the instance of the class. Alternatively, you can create  
an __autoload function that will determine what file needs to be  
loaded in order to create an instance of the class to be created.  
This can generally be done by mapping the class name be called to the  
file that needs to be loaded. __autoload is generally used for  
dynamically loading classes so you don't load anything that you don't  
need.

You may connect to the database 90% of the time, but why load the  
database class before you need to, since you may not need to.

Hope that helps


On Aug 5, 2007, at 2:49 PM, Michael B Allen wrote:

> Hi,
>
> Every once in a while I run into this and it takes a few hours to
> figure out what the right sequence of require_once statements are
> required to wriggle out of it:
>
> Notice: [...] The script tried to execute a method or access a
> property of an incomplete object. Please ensure that the class
> definition "Foo" 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 [...]
>
> Can someone explain to me what I need to know about how class
> definitions are loaded so that I can make some sense of these errors?
>
> It's not simply a matter of including the necessary file in the right
> spot. Clearly there are other forces at work and I'd like to know what
> they are.
>
> Mike
> _______________________________________________
> New York PHP Community Talk Mailing List
> http://lists.nyphp.org/mailman/listinfo/talk
>
> NYPHPCon 2006 Presentations Online
> http://www.nyphpcon.com
>
> Show Your Participation in New York PHP
> http://www.nyphp.org/show_participation.php




More information about the talk mailing list