php魔术方法(三)类的序列化和反序列化

上回说了,在PHP中,对于不存在方法和属性的操作。下面介绍另外一个特性。在魔术方法中,有个__sleep() 和 __weekup()。
__sleep()  当我们对类进行序列化操作的时候,serialize()函数会检查类中有没有__sleep()这个魔术方法,如果存在,则会优先调用这个方法。这时候,我们可以当前对象中想被序列化的变量名称组成的数组,利用这个方法返回。
__wakeup() 与__sleep相反,在unserialize()的时候,就会先查看这个方法是否存在。
需要注意的是,sleep的时候,不能返回父类中私有成员的名称。
让我们看一个例子:
class Connection 
{
    protected $link;
    private $server, $username, $password, $db;

    public function __construct($server, $username, $password, $db)
    {
        $this->server = $server;
        $this->username = $username;
        $this->password = $password;
        $this->db = $db;
        $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');
    }

    public function __wakeup()
    {
        $this->connect();
    }
}
现在当我们序列化这个类的时候,我们连接数据库的信息就会被保存起来,而当我们反序列化的时候,数据库通过wakeup连接成功。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值