控制对象串行化
希望控制使用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()。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战