控制对象串行化

希望控制使用serialize()和unserialize()处理对象时对象的行为。如果需要建立和关闭与远程资源的连接(如数据库、文件和Web服务),这会很有用。

class LogFile{
protected $filename;
protected $handle;
public function __construct($filename){
$this->filename = $filename;
$this->open();
}
private function open(){
$this->handle = fopen($this->filename, 'a');
}

public function __destruct($filename){
	fclose($this->handle);
}
// 串行化对象时调用
// 应当返回要串行化的对象属性的一个数组
public function __sleep(){
	return array('filename');
}
// 逆串行化对象时调用
public function __wakeUp(){
	$this->open();
}

}

PHP中串行化一个对象时,它会保留对象的所有属性。不过,这不包括所保存的外部资源的连接或句柄,如数据库、文件和Web服务。
这些必须在逆串行化对象时重建,否则对象将无法正确工作。可以在代码中显式地实现这一点,不过更好的办法是把这部分工作抽象出来,让PHP在后台处理。
可以通过_sleep()和_wakeUp()魔法方法来实现。对一个对象调用serialize()时PHP会调用 sleep(),调用unserialize()时,PHP则会调用wakeUp()。

posted @   kksllss  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示