By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,377 Members | 3,038 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,377 IT Pros & Developers. It's quick & easy.

_sleep and _wakeup

P: n/a
I didn't understand from this

http://in2.php.net/manual/en/languag...-functions.php

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?

Jun 17 '06 #1
Share this Question
Share on Google+
4 Replies


P: n/a
Water Cooler v2 wrote:
I didn't understand from this

http://in2.php.net/manual/en/languag...-functions.php

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?


Hi,

__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

Sincerely,
Alexander
http://www.alexatnet.com/

Jun 17 '06 #2

P: n/a
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. :-)

Jun 17 '06 #3

P: n/a

Water Cooler v2 wrote:
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. :-)


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.

Jun 18 '06 #4

P: n/a

Chung Leong wrote:
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.

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

Jun 18 '06 #5

This discussion thread is closed

Replies have been disabled for this discussion.