Я попытался кэшировать свой объект User в PHP с помощью memcache, но при использовании PDO я получаю сообщение об ошибке. Я добавил функцию __sleep и __wakeup.
User.php
/** * @var PDO */ protected $db; public function __construct() { $this->db = getInstanceOf('db'); } public function __destruct() { } public function __sleep() { return array('db'); } public function __wakeup() { $this->db = getInstanceOf('db'); }
getInstanceOf ('db') возвращает объект pdo …
Возвращает следующую ошибку:
PDOException: вы не можете сериализовать или unserialize экземпляры PDO в /var/www/test/User.php в строке 41
Вероятно, $this->db
является объектом PDO. Объекты PDO не могут быть сериализованы.
Удалите этот объект на __sleep()
и добавьте его обратно в __wakeup()
(это то, что вы уже делаете в последнем случае):
public function __sleep() { return array(); }
Вы не можете сериализовать объекты, которые не могут быть сериализованы. Но вы пытались, поэтому вы получили исключение. Это в основном проблема. Просто не говорите PHP для сериализации объектов, которые не могут быть сериализованы.