note 61130 deleted from language.oop5.magic by cmb

From: Date: Sun, 10 Nov 2019 12:40:37 +0000
Subject: note 61130 deleted from language.oop5.magic by cmb
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-212990@lists.php.net to get a copy of this message
Note Submitter: b dot schoppmeier at bas-consult dot de ---- The sequence of events regarding __sleep and __destruct is unusual __ as __destruct is called before __sleep. The following code snippet: <?php $sequence = 0; class foo { public $stuff; public function __construct($param) { global $sequence; echo "Seq: ", $sequence++, " - constructor\n"; $this->stuff = $param; } public function __destruct() { global $sequence; echo "Seq: ", $sequence++, " - destructor\n"; } public function __sleep() { global $sequence; echo "Seq: ", $sequence++, " - __sleep\n"; return array("stuff"); } public function __wakeup() { global $sequence; echo "Seq: ", $sequence++, " - __wakeup\n"; } } session_start(); $_SESSION["obj"] = new foo("A foo"); ?> yields the output: Seq: 0 - constructor Seq: 1 - destructor Seq: 2 - __sleep Only when you end your script with a call to session_write_close() as in: <?php $sequence = 0; class foo { public $stuff; public function __construct($param) { global $sequence; echo "Seq: ", $sequence++, " - constructor\n"; $this->stuff = $param; } public function __destruct() { global $sequence; echo "Seq: ", $sequence++, " - destructor\n"; } public function __sleep() { global $sequence; echo "Seq: ", $sequence++, " - __sleep\n"; return array("stuff"); } public function __wakeup() { global $sequence; echo "Seq: ", $sequence++, " - __wakeup\n"; } } session_start(); $_SESSION["obj"] = new foo("A foo"); session_write_close(); ?> the sequence is as common sense would expect it to be as the following output shows: Seq: 0 - constructor Seq: 1 - __sleep Seq: 2 - destructor

« previous php.notes (#212990) next »