PHP中__sleep()与__wakeup()的用法

从零开始讲DDR(5)——读懂Datasheet 对于开发人员来说,需要根据实际场景和使用的需要,使用不同厂家,不同型号的DDR,虽然原理上大同小异,但是还是有一些细节上的需要注意的地方,接触一个新的DDR芯片,首先就是需要找到对应的datasheet,而能都读懂datasheet,也是一个硬件工程师的必备技能。 阅读详情

在 PHP 进行序列化时会用到__sleep()和__wakeup()这两个构造函数.

序列化即将一个变量或者一个对象转换成字节流的过程. 序列化有效的解决了对象的保存和传输问题, 例如:在使用 session 并使用了 session_register() 函数来注册对象, 这些对象会在每个 PHP 页面结束时被自动序列化, 并在接下来的每个页面中自动解序列化, 这样在每个 PHP 页面中都可以使用这些对象

01//整型
02$var = 23;
03echo serialize($var)."\n";   //i:23;
04  
05//浮点型
06$var = 1.23;
07echo serialize($var)."\n";   //d:1.229999999999999982236431605997495353221893310546875;
08  
09//字符串
10$var = "This is a string";
11echo serialize($var)."\n";   //s:16:"This is a string";
12  
13//布尔型
14$var = true;
15echo serialize($var)."\n";   //b:1;
16  
17//数组变量
18$var = array("abc","def", "xyz","123");
19echo serialize($var)."\n";   //a:4:{i:0;s:3:"abc";i:1;s:3:"def";i:2;s:3:"xyz";i:3;s:3:"123";}
20  
21$var = array("index1"=>"abc","index2"=>"def","index3"=>"xyz","index4"=>"123");
22echo serialize($var)."\n";   //a:4:{s:6:"index1";s:3:"abc";s:6:"index2";s:3:"def";s:6:"index3";s:3:"xyz";s:6:"index4";s:3:"123";}
23  
24//对象序列化
25class A{
26      public$a = "a string";
27      public$b = 123;
28      public$c = 123.12;
29}
30$obj = new A; 
31$str = serialize($obj);
32echo $str."\n";             //O:1:"A":3:{s:1:"a";s:8:"a string";s:1:"b";i:123;s:1:"c";d:123.1200000000000045474735088646411895751953125;} 
33$obj2 = unserialize($str);  //进行反序列化
34var_dump($obj2== $obj);    //bool(true)

程序运行时, serialize() 检查类中是否有 __sleep() ,如果有,则该函数将在任何序列化之前运行. 该函数必须返回一个需要进行序列化保存的成员属性数组,并且只序列化该函数返回的这些成员属性. 该函数有两个作用: 第一. 在序列化之前,关闭对象可能具有的任何数据库连接等. 第二. 指定对象中需要被序列化的成员属性,如果某个属性比较大而不需要储存下来,可以不把它写进__sleep()要返回的数组中,这样该属性就不会被序列化

__sleep() 方法常被用于提交未提交的数据, 或者类似的操作.

与 __sleep() 方法相反的情况, unserialize() 函数会检测是否存在 __wakeup() 函数, 如果存在会先调用 __wakeup(), 预先准备对象数据. 在用 unserialize()时需要注意的一个问题: 在一个PHP页面中要 unserialize() 一个对象,需要该页面包含该对象的类的定义.也就是,如果序列化了 page1.php 中类 A 的对象 $a, 要在 page2.php 中将其反序列化重建类 A 的对象 $a, 则 page2.php 中必须要出现类 A 的定义. 这可以这样实现,将类 A 的定义放在一个包含文件中,并在 page1.php 和 page2.php 都包含此文件. 所以强烈建议在所有的页面中都包括这些注册的对象的类的定义, 即使并不是在所有的页面中都用到了这些类. 如果没有这样做, 一个对象被反序列化了但却没有其类的定义,它将失去与之关联的类并成为 stdClass 的一个对象而完全没有任何可用的函数。

 
01//classa.inc:
02class A 
03{
04      var$one = 1;
05     
06      functionshow_one()
07      {
08          echo$this->one;
09      }
10}
11  
12//page1.php:
13include("classa.inc");
14  
15$a = new A;
16$s = serialize($a);
17$fp = fopen("store","w"); // 将 $s 存放在某处使 page2.php 能够找到
18fputs($fp,$s);
19fclose($fp);
20  
21//page2.php:
22include("classa.inc");     // 为了正常解序列化需要这一行
23  
24$s = implode("", @file("store"));
25$a = unserialize($s);
26  
27$a->show_one();// 现在可以用 $a 对象的 show_one() 函数了

__wakeup() 方法经常用在反序列化操作中, 例如重新建立数据库连接,或其他的初始化工作.

例子:

01class Connection {
02     protected$link;
03     private$server, $username,$password, $db;
04      
05     publicfunction __construct($server,$username, $password, $db)
06     {
07        $this->server =$server;
08        $this->username =$username;
09        $this->password =$password;
10        $this->db =$db;
11        $this->connect();
12     }
13      
14     privatefunction connect()
15     {
16        $this->link = mysql_connect($this->server,$this->username,$this->password);
17        mysql_select_db($this->db,$this->link);
18     }
19      
20     publicfunction __sleep()
21     {
22         returnarray('server','username', 'password', 'db');
23     }
24      
25     publicfunction __wakeup()
26     {
27        $this->connect();
28     }
29}
计算机组成原理(第三版)唐朔飞-第六章计算机的运算方法-课后习题(1-16) 阅读详情

相关推荐

open-mmlab / mmpose安装、使用教程

mmpose安装、使用教程mmpose安装教程1. 安装mmcv-full2. 安装MMPose2. 安装mmdet使用教程1. 预测图片2. 预测视频 mmpose mmpose是商汤旗下有又一款好用的工具箱,主要是针对姿态识别任务开发的,包括人体姿态识别和动物姿态识别。里面继承很多现成的网络可以供大家使用,并且提供了训练好的权重。用户可以更具自己的需求训练自己的数据,或者直接应用他们的结果,反正就是很全面啦!!!! github连接:https://github.com/open-mmlab/mmpos

CharmsLUO的博客 1万+

PHP常见函数总结_wp源码开启limit()和sleep()函数

【代码】PHP常见函数总结_wp源码开启limit()和sleep()函数。

2401_87556590的博客 928

STM32F407+LAN8720A+LwIP实战:FreeModbus TCP从机功能开发指南

本文详细介绍了基于STM32F407和LAN8720A硬件平台,结合LwIP协议栈实现FreeModbus TCP从机功能的开发指南。内容涵盖硬件连接、LwIP移植、FreeModbus TCP从机实现、任务调度及调试技巧,为工业控制领域的以太网通信开发提供实用参考。

weixin_29190651的博客 546

PHP之sleep() 与 usleep() 的区别

PHP中的sleep()和usleep()函数都是用于暂停脚本执行的函数,但它们之间有一些区别: sleep()函数:sleep()函数用于在脚本中暂停指定的秒数。它接受一个参数,表示需要暂停的秒数,可以是整数或浮点数。在调用sleep()函数后,脚本将被阻塞指定的时间,然后再继续执行下一条语句。 usleep()函数:usleep()函数用于在脚本中暂停指定的微秒数(1秒=1000000微秒)。它接受一个参数,表示需要暂停的微秒数,只能是整数。与sleep()相比,usleep()提供了更小的暂停单位,

php-yyds 1765

【Python办公】剪贴板记录工具(记录文本 + 图片防重复)

本文介绍了一个用Python开发的剪贴板记录工具,能够自动记录复制过的文本和图片内容。该工具使用tkinter构建GUI界面,通过后台线程实时监控剪贴板变化,具有文本记录、图片保存(自动去重)功能。核心代码采用pyperclip访问剪贴板,PIL处理图片,hashlib计算图片哈希值实现去重。运行程序后,文本内容直接显示在界面,图片保存为PNG文件并记录路径。工具还提供清空历史记录功能,适合日常办公中需要追踪剪贴板历史的使用场景。

weixin_42636075的博客 239

使用 MATLAB/Simulink + Deep Learning Toolbox,构建一个基于LSTM的电网负荷预测模

本文介绍了一个基于Simulink和深度学习的智能电网负荷预测与调度建模方法。通过LSTM神经网络构建负荷预测模型,将历史负荷、天气、日期等特征作为输入,预测未来24小时负荷。然后将训练好的模型集成到Simulink仿真系统中,结合发电单元模型和经济调度逻辑,实现预测驱动的电力调度优化。实验结果表明,该方法预测误差在2.5%-4.0%之间,相比传统调度方式可降低15%-25%的运行成本。文章详细展示了从数据准备、特征工程、模型训练到系统集成的完整流程,为智能电网中AI技术的应用提供了实用参考。

amy_mhd的博客 170

php延迟执行sleep和usleep

sleep(秒);单位是秒 usleep(毫秒);单位是毫秒 1秒=1000毫秒。 在PHP单页中项目中代表延迟的意思。程序逻辑停顿下来,等时间一过继续执行下面的程序。 页面运行表现为卡顿

he02980272的专栏 4590

19、英国模式:银行体系的演变与现代金融架构

本文深入探讨了英国银行体系从专业化向全能银行的演变过程,分析了自律监管模式的优劣,并解析了围栏制度对金融稳定的影响。同时,文章还介绍了信用合作社、建筑协会和投资银行的角色与转型,全面展示了英国金融体系的多样性与复杂性,以及其在全球金融市场中的重要作用。

embedding5hiker的博客 104

php中的sleep和usleep

php代码的执行是单线程的,php使用php-fpm(Fastcgi 进程管理器) 负责进程的分配和管理,如果php-fpm进程数量达到了配置的最大值pm.max_children ,剩下的请求只能排队,sleep() 函数将很容易阻塞住一个进程,甚至很容易把整个网站的请求被阻塞住。

hudeyong926的专栏 2524

ORB-SLAM2算法4之KITTI开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹

ORB-SLAM2算法1 已成功编译安装ORB-SLAM2到本地,本篇目的是用KITTI开源数据来运行ORB-SLAM2,并生成轨迹,最后用evo评估工具来评估ORB-SLAM2生成的轨迹和真值轨迹。

重点记录机器人和自动驾驶相关领域的技术,尤其是计算机视觉,视觉SLAM等,不仅有前言文献或必备算法的学习,也会有实际应用的点滴经验 2326

解析AI人工智能领域AI芯片的散热技术

当你用ChatGPT写代码、用AI生成高清图片时,背后的AI芯片可能正在“发高烧”——全球TOP500超算的平均功耗已突破10兆瓦,单颗GPU的峰值功耗超过700W(相当于3台家用空调同时运行)。本文将聚焦AI芯片的散热技术,覆盖从基础原理到前沿方案的全链条解析,帮助读者理解“散热为什么比算力更重要”。

AIGC应用创新大全的博客 934

PHP__sleep和__wakeup有什么区别

在PHP中,__sleep和__wakeup是两个魔术方法(Magic Methods),它们与对象的序列化和反序列化过程紧密相关。这两个方法允许开发者在对象被序列化(存储或传输)和反序列化(恢复)时执行自定义的代码。__sleep方法在对象被序列化之前自动调用。它的主要目的是返回一个包含对象中所有应被序列化的属性名称的数组。如果某个属性不需要被序列化,那么它就不应该出现在这个数组中。如果__sleep方法没有返回任何数组(即返回空数组或者没有返回值),那么PHP将尝试序列化对象中的所有公共属性。

sheji888的专栏 1208

rk3568 点亮双LVDS 屏

承接文章《rk3568点亮LCD(lvds)》中仅仅只能使用亮单LVDS;经过厂商的努力,陆续发布新补丁。目前支持双lvds显示,缺憾是需要自己额外移植相关补丁。受限于通信频率和VOP编码能力,支持最大分辨仍然是1920x1080、60fps。

weixin_35723192的博客 3007

03 php mvc 第10天 面向对象笔记4 序列化

变量序列化 1、什么是变量序列化 序列化是将变量转换为可保存或传输的字符串的过程; 反序列化就是在适当的时候把这个字符串再转化成原来的变量使用; 这两个过程结合起来,可以轻松地存储和传输数据,使程序更具维护性; 序列化有利于存储或传递 PHP 的值,同时不丢失其类型和结构。 2、序列化函数serialize() 描述:产生一个可存储的值的表示; 语法:string serialize...

fly 400

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

PHP类中的魔术方法+动态类导学

PHP不知道为什么,钟爱“魔术”这个词,什么都弄魔术。其实想想也非常形象,就拿PHP类中的魔术方法来说吧,你不需要去调用 他们的任何一个方法,他们却可以执行,影响你的程序。 在学习之前我要说两句,首先你不能漠视魔术方法,不要认为你不用这世界上用的人就非常少,作用就小。其实 PHP的魔术方法是PHP的一大特征,既然你学了一种语言,连它最基本的特征都没学,还叫学习了这个语言了吗?其次,不要认为看

wang_quan_li的专栏 809

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

PHP序列化与反序列化(__sleep与__wakeup)

前言 总结一下序列化和反序列化的知识 介绍 1、序列化 将一个对象转换为字符串 2、反序列化 将一个字符串恢复成对象 PHP序列化 php序列化的函数为serialize() 例: <?php class peak{ public $name = "1stPeak"; protected $sex = "man"; private $age = "18"; } $a = new pe...

1stPeak's Blog 4440

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【PHP开发900个实用技巧】158.对象序列化: __sleep()和__wakeup()的用途!

本文深入探讨了PHP对象序列化过程中的两个关键魔术方法:__sleep()和__wakeup()。文章首先解释了对象序列化的基本原理,即把对象转换为可存储或传输的字符串格式,以及反序列化即逆过程。接着,文章详细介绍了__sleep()方法,该方法在对象序列化前触发,允许开发者指定哪些属性应该被序列化,从而实现对象的轻量化,减少数据传输量。 文章还讨论了__wakeup()方法,它在对象反序列化后立即执行,用于重建对象的运行环境。通过正确实现这两个魔术方法,可以避免序列化过程中的安全风险,如敏感数据泄露,并优

837

php __wakeup(),PHP魔术方法__wakeup()

与__sleep()方法相对的就是__wakeup()方法,常用来反序列化,如重建数据连接,或执行其他初始化操作等。示例代码如下:classPerson{public$sex;public$name;public$age;publicfunction__construct($name="",$age=25,$sex='Male'){$this->name=$name;$...

weixin_42394913的博客 1204

PHP魔术方法__sleep与__wakeup与序列化

当一个对象被序列化,PHP会调用__sleep方法(如果存在的话). 在反序列化一个对象后,PHP 会调用__wakeup方法. 这两个方法都不接受参数. __sleep方法必须返回一个数组,包含需要序列化的属性. PHP会抛弃其它属性的值. 如果没有__sleep方法,PHP将保存所有属性. 在程序执行前,serialize() 函数会首先检查是否存在一个魔术方法 __sleep.如果存在,__...

猛犸象 900

php magic sleep,PHP魔法方法之__sleep()方法和__wakeup()方法

public array __sleep ( void )void __wakeup ( void )serialize() 函数会检查是否存在一个魔术方法 __sleep().如果存在,__sleep()方法会先被调用, 然后才执行序列化操作。这个功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法不返回任何内容,则NULL被序列化,并产生 一个E_NOTICE错...

weixin_39543655的博客 191

php up,PHP中 __wakeup()方法详解

__wakeup(),执行unserialize()时,先会调用这个函数如果说 __sleep() 是白的,那么 __wakeup() 就是黑的了。那么为什么呢?因为:与之相反,`unserialize()` 会检查是否存在一个 `__wakeup()` 方法。如果存在,则会先调用 `__wakeup` 方法,预先准备对象需要的资源。作用:__wakeup() 经常用在反序列化操作中,例如重新建立...

weixin_36033929的博客 1291

php中_sleep和_wakeup,php中_sleep跟_wakeup

php中__sleep和__wakeup在php中,__sleep和___wakeup是两个分别自对象序列化前和后分别调用的方法,其中__sleep在一个对象序列化前调用,它不接收任何参数,但会返回数组,这里可以放置哪些属性需要序列化,比如下面的例子:class Customer { private $name; private $credit_card_number; public funct...

weixin_32239819的博客 240

魔术方法__sleep(),__wakeup()

  这两个方法是在对象的序列化与反序列话里使用的,当序列化serialize对象时,可以把对象里的属性和方法转换成连续的bytes数据,保存在一个文件里或者在网络上传输,当需要使用这个对象时,就可以反序列话unserialize这个字符串,得到这个对象,然后继续使用。   当对一个对象序列化时,php就会调用__sleep方法(如果存在的话),在反序列化时,php就会调用__wakeu...

didanve1659的博客 303

php魔术方法__sleep()、__wakeup(); serialize()、unserialize()

<?php /** * @Author: Leen * @Date: 2020-12-10 11:12:59 * @Email: lining@yoozoo.com * @Last Modified By : Leen */ class Wakeup { private $name, $age, $info; function __construct($name, $age) { $this->name = $name;

leedaning的专栏 575

php中_sleep和_wakeup,php中__sleep和__wakeup

在php中,__sleep和___wakeup是两个分别自对象序列化前和后分别调用的方法,其中__sleep在一个对象序列化前调用,它不接收任何参数,但会返回数组,这里可以放置哪些属性需要序列化,比如下面的例子: class Customer {private $name;private $credit_card_number;public function setName($name) {$th...

weixin_39853843的博客 206

__sleep与__wakeup

串行化serialize可以把变量包括对象,转化成连续bytes数据. 你可以将串行化后的变量存在一个文件里或在网络上传输. 然后再反串行化还原为原来的数据. 你在反串行化类的对象之前定义的类,PHP可以成功地存储其对象的属性和方法. 有时你可能需要一个对象在反串行化后立即执行. 为了这样的目的,PHP会自动寻找__sleep和__wakeup方法.当一个对象被串行化,PHP会调用__sleep方法

GDevil1994的博客 750
上一篇: OOP中__set()和__get()方法
下一篇: clearstatcache -- 清除文件状态缓存
战忽局六处
博客等级 码龄14年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值