- 浏览: 7942996 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (2425)
- 软件工程 (75)
- JAVA相关 (662)
- ajax/web相关 (351)
- 数据库相关/oracle (218)
- PHP (147)
- UNIX/LINUX/FREEBSD/solaris (118)
- 音乐探讨 (1)
- 闲话 (11)
- 网络安全等 (21)
- .NET (153)
- ROR和GOG (10)
- [网站分类]4.其他技术区 (181)
- 算法等 (7)
- [随笔分类]SOA (8)
- 收藏区 (71)
- 金融证券 (4)
- [网站分类]5.企业信息化 (3)
- c&c++学习 (1)
- 读书区 (11)
- 其它 (10)
- 收藏夹 (1)
- 设计模式 (1)
- FLEX (14)
- Android (98)
- 软件工程心理学系列 (4)
- HTML5 (6)
- C/C++ (0)
- 数据结构 (0)
- 书评 (3)
- python (17)
- NOSQL (10)
- MYSQL (85)
- java之各类测试 (18)
- nodejs (1)
- JAVA (1)
- neo4j (3)
- VUE (4)
- docker相关 (1)
最新评论
-
xiaobadi:
jacky~~~~~~~~~
推荐两个不错的mybatis GUI生成工具 -
masuweng:
(转)JAVA获得机器码的实现 -
albert0707:
有些扩展名为null
java 7中可以判断文件的contenttype了 -
albert0707:
非常感谢!!!!!!!!!
java 7中可以判断文件的contenttype了 -
zhangle:
https://zhuban.me竹板共享 - 高效便捷的文档 ...
一个不错的网络白板工具
在php中,__sleep和___wakeup是两个分别自对象序列化前和后分别调用的方法,
其中__sleep在一个对象序列化前调用,它不接收任何参数,但会返回数组,这里可以放置哪些属性需要序列化,比如下面的例子:
上面在序列化前,__sleep中指定了只有name属性会序列化,而creaditcard不会。
而__wakeup则相反,它是在反序列化前触发的,比如下面例子:
上面的代码中,因为序列化时使用了__sleep,沒把creadit cardnumber属性序列化,因此在反序列化unserialize调用前,会先调用__wakeup方法,比如这里可以重新在数据库中取得数据,再此进行操作
其中__sleep在一个对象序列化前调用,它不接收任何参数,但会返回数组,这里可以放置哪些属性需要序列化,比如下面的例子:
class Customer { private $name; private $credit_card_number; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } public function setCC($cc) { $this->credit_card_number = $cc; } public function getCC() { return $this->credit_card_number; } public function __sleep() { return array(“name”); //只有name会序列化 } } $c = new Customer(); $c->setName(“Stuard”); $c->setCC(“456789″); $data = serialize($c).”\n”; echo $data.”\n”; Output: O:8:”Customer”:1:{s:14:” Customer name”;s:5:”Stuard”;}
上面在序列化前,__sleep中指定了只有name属性会序列化,而creaditcard不会。
而__wakeup则相反,它是在反序列化前触发的,比如下面例子:
class Customer { private $name; private $credit_card_number; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } public function setCC($cc) { $this->credit_card_number = $cc; } public function getCC() { return $this->credit_card_number; } public function __sleep() { return array(“name”); } public function __wakeup() { if($this->name == “Stuart”) { //重新在数据库中获得 $this->credit_card_number = “1234567890123456″; } } } $c = new Customer(); $c->setName(“Stuart”); $c->setCC(“1234567890123456″); $data = serialize($c).”\n”; var_dump(unserialize($data)); Output: object(Customer)#2 (2) { ["name:private"]=> string(5) “Stuart” ["credit_card_number:private"]=> string(16) ’1234567890123456³ }
上面的代码中,因为序列化时使用了__sleep,沒把creadit cardnumber属性序列化,因此在反序列化unserialize调用前,会先调用__wakeup方法,比如这里可以重新在数据库中取得数据,再此进行操作
发表评论
-
11个php日常用的小tips 代码片段
2014-01-21 20:34 1936http://www.phpzag.com/11-useful ... -
php中的DirectoryIterator和RecursiveDirectoryIterator
2013-07-27 22:50 3517php中,可以用用DirectoryIterator获取指定目 ... -
uccenter中找回创始人密码
2013-03-11 19:12 1923偶然忘记了uccenter中的创始人密码,一查看,其实找回 ... -
php中通过register_shutdown_function记录fatal error
2013-02-09 23:56 2969今天发现php中,如果要记录fatal error的时候, ... -
php中检查是否ajax请求
2013-01-19 09:53 1471$ajax = false; if(!empty ... -
php中检查某个网页地址是否有效能被打开的最简单方法
2012-10-22 16:18 2094php中检查某个网页地址是否有效能被打开的最简单方法,其实可以 ... -
小结几个php操作office的类库
2012-07-20 19:16 19411 phpexcel 最强大完整的类库了,地址在: ht ... -
介绍几个PHP的开源不错的图片类库
2012-07-14 13:11 2883介绍几个PHP的开源不错的图片类库 1 pchart ... -
PHP 5.4正式版重要新特性
2012-05-25 08:34 1676原文发表在:http://tech.it168.com/a20 ... -
用php实现备份数据库ZIP及导出
2012-04-17 08:59 1849经常在有的PHP开源系统中,看到有备份数据库并导出的方法 ... -
PHP Codeigniter 中的_remap方法简介
2012-04-05 21:06 4588在Codeigniter 中,其实有个容易忽略掉的不错的控 ... -
PHP 5.4中的traits初探
2012-04-01 19:57 5056PHP 5.4中的traits,是新引入的特性,中文还真不知道 ... -
php中的pdo和mysqli的对比选择
2012-03-10 22:25 7153在PHP中,如何选择PDO和mysqli呢?本文做个简单的 ... -
php 5.4中新增加对session状态判断的功能
2012-02-20 12:28 3969在以前的php 版本中,要判断session是否有效,只能 ... -
php curl的几段小应用
2012-02-07 10:10 1826php 的CURL是不错的功能,下面收藏几段不错的片段 1 ... -
php 5.3中的一个type hinting的用法
2012-01-20 11:50 2319今天偶然看php 5.3中的一个特性,叫type hintin ... -
cakephp的分页排序
2012-01-04 10:38 4232cakephp中的分页还是很简单的,下面例子复习下 1 数据 ... -
mongodb+php学习1
2012-01-03 11:51 52341 mongodb启动时,设置启动项 C:\>mon ... -
php中挺好用的strtotime方法
2011-12-20 11:32 1962在PHP中,经常要对日期进行计算,比如要计算一个月前的日期 ... -
php中使用curl发送JSON数据
2011-11-28 13:43 11797在PHP中,可以使用curl去发送JSON数据,例子如下: ...
相关推荐
PHP(__ wakeup,__ sleep,Serializable,__ serialize,__ unserialize),它还提供了一个实例化程序,该实例化程序无需调用其构造函数或任何其他方法即可创建和填充对象。使用此组件与serialize()或igbinary的...
虽然这样做,它保留了与PHP的序列化机制(相关联的所有语义__wakeup , __sleep , Serializable , __serialize , __unserialize )。 它还提供了一个实例化器,该实例化器允许创建和填充对象而无需调用其构造...
PHP允许我们在类中定义`__sleep()`和`__wakeup()`这两个魔术方法来自定义序列化和反序列化的行为。 - `__sleep()`:在序列化前被调用,可以决定哪些属性需要被序列化。返回的是一个包含需要序列化属性名的数组。 `...
在PHP的序列化和反序列化过程中,`__sleep()`和`__wakeup()`魔术方法扮演着重要的角色。 - **__sleep()**: 在序列化对象之前,PHP会尝试调用该对象的`__sleep()`方法。该方法可以用于清理对象,比如释放资源或执行...
`__sleep()`和`__wakeup()`则分别在对象串行化和反串行化时发挥作用。 7. 访问控制: `public`、`private`和`protected`定义了类成员的访问级别。`public`成员在任何地方都可以访问,`private`成员仅限于本类内部,...
其次,由于PHP 8移除了`__sleep()`和`__wakeup()`魔术方法中的`serialize_callback_func`配置,可能会影响到PHPExcel的序列化和反序列化过程。如果遇到此问题,可以尝试使用其他序列化方法,如`json_encode`和`json_...
最后,`Connection`类演示了如何在`__sleep()`和`__wakeup()`中处理数据库连接的序列化和反序列化,确保链接状态在序列化后能够恢复。 这些魔术方法是PHP中面向对象编程的重要组成部分,它们允许开发者实现更灵活和...
魔术方法可以分为以下几类:__sleep、__wakeup、__toString、__set_state、__construct、__destruct、__call、__get、__set、__isset、__unset。这些方法可以在特定的情况下自动被调用,例如在对象被 serialize 时...
- `__sleep()` 和 `__wakeup()`:在序列化和反序列化过程中调用。 4. **PHP对象相关知识**: - 属性可见性:public(公共)、private(私有)、protected(受保护),控制对属性的访问权限。 - 静态属性(Static...
PHP中的魔术方法有 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone, __autoload 1、__get、__set 这两个方法是为在...
PHP中的魔术方法__sleep和__wakeup是与序列化和反序列化相关的特殊方法。__sleep方法在对象被序列化前调用,可以返回一个数组,数组中包含需要被序列化的属性名,其他属性则会被忽略。__wakeup方法在对象被反序列化...
4. 防止序列化和反序列化:如果允许对象被序列化和反序列化,可能会导致单例模式失效,因此我们需要封锁`__wakeup()`和`__sleep()`方法。 ```php class Singleton { // ... private function __wakeup() { ...
`__sleep()` 和 `__wakeup()` - 序列化和反序列化 - `__sleep()` 在序列化前被调用,可以用来清除不必要的属性或进行其他准备工作。 - `__wakeup()` 在反序列化后被调用,可以用来重新建立必要的资源连接或其他...
序列化和反序列化是 PHP 中两个基本概念。序列化是将对象的状态信息转换为可以存储或传输的形式的过程,而反序列化是将存储的状态信息重新转换为对象的过程。 序列化的过程可以将对象、类、数组、变量、匿名函数等...
此外,文件中还提到了`__sleep`和`__wakeup`魔术方法。`__sleep`在对象被序列化之前调用,而`__wakeup`在对象被反序列化后调用。这些方法通常用于清除对象的资源或准备对象被序列化。 `__toString`方法则是在对象被...
文章中提到,PHP中的对象可以看作是一个有属性(properties)和方法(methods)的实体。属性可以类比为现实世界中的物体属性,如人的身高、体重等。方法则是对象可以执行的操作或行为,如人的唱歌、跳舞等。类...
`__sleep()` 和 `__wakeup()` - **定义与用途**:`__sleep()` 在序列化对象之前被调用,可以用来清理资源或者返回一个数组,包含对象中应被序列化的变量名。`__wakeup()` 在反序列化对象之后被调用,通常用于重新...