__sleep, __wakeup and persistent connections
| From: | Marcus Bointon | Date: | Sat, 20 Aug 2005 13:33:33 +0000 |
| Subject: | __sleep, __wakeup and persistent connections | ||
| Groups: | php.general | ||
| Request: | Send a blank email to php-general+get-221009@lists.php.net to get a copy of this message | ||
I'm sorting out some code to handle session object storage, particularly where the objects contain DB connections. I've found lots of articles that go on about how __sleep should clean up db stuff, close connections etc and how __wakeup should reconnect, but weirdly enough I've not found a single concrete example of doing this!
It's also not quite clear how this behaviour interacts with persistent connections. For example, If I do this:
class foo {
protected $db;
public function __construct() {
$this->db = mysql_pconnect(....);
}
protected function __wakeup() {
$this->db = mysql_pconnect(....);
}
protected function __sleep() {
mysql_close($this->db);
$this->db = NULL;
return array();
}
}
given that the connection is persistent, and may thus be used by other scripts, is calling mysql_close a particularly bad idea? Should I just not bother closing the connection, letting PHP deal with it - the object will not attempt to re-use the stale connection because it will get a new instance courtesy of __wakeup when unserialized.
I'm also unclear about how __sleep acts in subclasses - it seems that as soon as I have a __sleep function in a base class, I don't have any choice but to implement __sleep functions in every subclass of it, even if I don't want them to do anything that would not be done if __sleep were not defined. in the exampel, the base class has no properties to save, so it returns an empty array from __sleep, but that's unlikely to be useful for a subclass that does have properties (and serializing an object without any properties is pointless!).
Ideas?
Marcus
--
Marcus Bointon
Synchromedia Limited: Putting you in the picture
marcus@synchromedia.co.uk | http://www.synchromedia.co.uk