[PHP]实体类基类和序列化__sleep问题
2019-04-28 08:25:18来源:博客园 阅读 ()
1.构造函数传参
2.__get和__set实现,当调用不存在的属性的时候,可以取值和赋值到data属性数组
3.__sleep实现,当序列化对象的时候,只序列化data属性数组和类内初始化定义的字段
4.__isset实现,可以判断属性是否存在,通过判断data属性数组
5.toArray方法实现,返回data属性数组
6.记录了构造初始化后,动态添加的属性字段
<?php class Sina_Data_Object { protected $data = array(); private $changes = array(); private $newFlag = true; public function __construct($data = array()){ if (empty($data)) { $this->newFlag = true; } else { $this->newFlag = false; foreach ($data as $k => $v) { $this->data[$k] = $v; } } } public function __isset($name){ return isset($this->data[$name]); } public function __get($name){ if(!array_key_exists($name, $this->data)){ return null; } return $this->data[$name]; } public function __set($name, $value){ $this->data[$name] = $value; if (!$this->newFlag) { $this->changes[$name] = $value; } } public function __sleep(){ return array('data'); } public function toArray(){ return $this->data; } public function isNew(){ return $this->newFlag; } public function clearNewFlag(){ $this->newFlag = false; } public function isModified() { return (!empty($this->changes)); } public function getChanges() { return $this->changes; } public function clearChanges() { $this->changes = array(); } } class Setting extends Sina_Data_Object{ const STATUS=1; public $other='aaa'; public function __construct($data=array()){ parent::__construct($data); } } //初始化对象 $data=array('user'=>'taoshihan'); $setting=new Setting($data); //动态增加属性 $setting->age=100; var_dump($setting); /* object(Setting)#1 (4) { ["other"]=> string(3) "aaa" ["data":protected]=> array(2) { ["user"]=> string(9) "taoshihan" ["age"]=> int(100) } ["changes":"Sina_Data_Object":private]=> array(1) { ["age"]=> int(100) } ["newFlag":"Sina_Data_Object":private]=> bool(false) } */ //动态改变初始化的字段 $setting->other='bbbb'; //序列化对象 $serializeSetting=serialize($setting); //反序列化对象 $setting2=unserialize($serializeSetting); var_dump($setting2); /* object(Setting)#2 (4) { ["other"]=> string(3) "aaa" ########反序列化回来这里还是aaa ["data":protected]=> array(3) { ["user"]=> string(9) "taoshihan" ["age"]=> int(100) } ["changes":"Sina_Data_Object":private]=> array(0) { ##########change属性里面的数据没有序列化进去 } ["newFlag":"Sina_Data_Object":private]=> bool(true) #########反序列化回来这里是true } */
原文链接:https://www.cnblogs.com/taoshihan/p/10784277.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- PHP写UltraEdit插件脚本实现方法 2020-03-29
- php 带逗号千位符数字的处理方法 2020-03-28
- PHP三元运算符的结合性介绍 2020-03-28
- PHP静态延迟绑定和普通静态效率的对比 2020-03-28
- 基于php流程控制语句和循环控制语句 2020-03-28
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash