_sleep and _wakeup

Do you have a question? Post it now! No Registration Necessary.  Now with pictures!

Threaded View
I didn't understand from this


whether we, the programmer, have to implement _sleep and _wakeup (like
.NET's IDisposable.Dispose()) or it is done by PHP internally on a
class that uses resources?

Re: _sleep and _wakeup

Water Cooler v2 wrote:
Quoted text here. Click to load it


__sleep and __wakeup are the methods, that you can implement in your
class. They are just like events that occur before serialization and
after unserialization. Consider this:

class MyClass {
  function __sleep() {
    echo "__sleep\n";
    return array();
  function __wakeup() {
    echo "__wakeup\n";

$c = new MyClass();
echo "Sleep: ";
$str = serialize($c);
echo "Wakeup: ";
$c1 = unserialize($str);

The output will be:
Sleep: __sleep
Wakeup: __wakeup


Re: _sleep and _wakeup

Thanks. That answers it. The onus of cleaning up and restoring
"resources" (if the class uses any) is with us, and hence the
implementation of these methods is a way given to us to do that before
serialization and after deserialization.

Thanks, again. :-)

Re: _sleep and _wakeup

Water Cooler v2 wrote:
Quoted text here. Click to load it

You misunderstood I'm afraid. IDisposable.Dispose called, if I remember
my .NET correctly, when an object is garbage collected. __sleep() is
called when an object is serialized--usually at the end of the request
when PHP saves session data to a file. Its main purpose is to let PHP
know what properties within the object should be saved and what
shouldn't be (cached records for instance). The __wakeup() method is
the inverse of that--called when PHP restore data previously stored in
a file into an object.

__destruct() is the closest counter part to IDisposable.Dispose. You
typically don't need to manually free resources, since PHP will do it
for you at the end of a request.

Re: _sleep and _wakeup

Chung Leong wrote:

Quoted text here. Click to load it

Thanks, Chung. I'd understood correctly, albeit my anology was rather

Site Timeline