本文主要是介绍PHP序列化用到的构造:__sleep() __wakeup(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
串行化serialize可以把变量包括对象,转化成连续bytes数据. 你可以将串行化后的变量存在一个文件里或在网络上传输. 然后再反串行化还原为原来的数据. 你在反串行化类的对象之前定义的类,PHP可以成功地存储其对象的属性和方法. 有时你可能需要一个对象在反串行化后立即执行. 为了这样的目的,PHP会自动寻找__sleep和__wakeup方法.
当一个对象被串行化,PHP会调用__sleep方法(如果存在的话). 在反串行化一个对象后,PHP 会调用__wakeup方法. 这两个方法都不接受参数. __sleep方法必须返回一个数组,包含需要串行化的属性. PHP会抛弃其它属性的值. 如果没有__sleep方法,PHP将保存所有属性.
<?php
class Connection {protected $link;
private $server, $username, $password, $db;
public function __construct($server, $username, $password, $db, $test ,$tmp)
{
$this->server = $server;
$this->username = $username;
$this->password = $password;
$this->db = $db;
$this->test = $test;
$this->tmp = $tmp;
$this->connect();
}
private function connect()
{
$this->link = mysql_connect($this->server, $this->username, $this->password);
mysql_select_db($this->db, $this->link);
}
public function __sleep()
{
return array('server', 'username', 'password', 'db','test');
}
public function __wakeup()
{
$this->connect();
}
}
$u = new Connection('192.168.2.142','root','root','mysql','test','');
$s = serialize($u); // 只返回了 __sleep return 中的字符
var_dump($s);
$u2 = unserialize($s); //unserialize反串行化,id值被重新赋值
var_dump($u2);
exit;
这篇关于PHP序列化用到的构造:__sleep() __wakeup()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!