也许这段代码可以帮助你,当你序列化一个对象实例时,数据库连接关闭并且没有以序列化形式保存,当你反序列化这个对象时 __wakeup() 方法在反序列化时重新建立数据库连接,所以你可以使用这些资源 inmediatly,您可以在反序列化时看到 $objTest->getUserInfo() 的使用。您可以使用 __wakeup 进行微积分或打开文件连接等...
class Test
{
public $userId;
private $_db = null;
public function __wakeup()
{
if (null === $this->_db)
{
$this->_db = getConnection();
}
}
public function getUserInfo(){
$info = $this->_db->query("SELECT * FROM users WHERE id = " . intval($this->userId, 10));
return $info;
}
}
function getConnection(){
$user = "my_user_db";
$password = "my_password_db";
return new PDO('mysql:host=my_host_db;dbname=my_database', $user, $password);
}
$objTest = unserialize("O:4:\"Test\":2:{s:6:\"userId\";s:2:\"43\";s:9:\" Test _db\";N;}", ['Test']);
$userInfo = $objTest->getUserInfo();