php 线程休眠_PHP __sleep() 和 __wakeup() 魔术函数的使用方法

本文介绍了PHP中的两个魔术函数__sleep()和__wakeup(),它们分别在对象序列化和反序列化过程中发挥关键作用,帮助开发者控制数据存储和资源准备。通过实例演示了如何使用这两个函数来管理对象属性和状态。
摘要由CSDN通过智能技术生成

PHP 魔术函数之 __sleep()/__wakeup()

__sleep()

触发事件:对象被序列化之前

作用:返回需要被序列化存储的成员属性,删减不必要

返回:array 需要被序列化存储的成员属性数组

__wakeup()

触发事件:类的实例的序列化串被反序列化时

作用:预先准备对象资源

返回:void

实例:

class Person

{

private $name, $age, $sex, $info;

public function __construct( $name, $age, $sex )

{

$this->name = $name;

$this->age  = $age;

$this->sex  = $sex;

$this->info = sprintf("prepared by construct magic functionname: %s age: %d sex: %s",

$this->name, $this->age, $this->sex);

}

public function getInfo()

{

echo $this->info . PHP_EOL;

}

/**

* serialize前调用 用于删选需要被序列化存储的成员变量

* @return array [description]

*/

public function __sleep()

{

echo __METHOD__ . PHP_EOL;

//序列化时只会存储 name age sex, info 不会被序列化

return ['name', 'age', 'sex'];

}

/**

* unserialize前调用 用于预先准备对象资源

*/

public function __wakeup()

{

echo __METHOD__ . PHP_EOL;

$this->info = sprintf("prepared by wakeup magic function name: %s age: %d sex: %s",

$this->name, $this->age, $this->sex);

}

}

$boy = new Person( 'sallency', 25, 'male' );

//构造函数组装的 $info

$boy->getInfo();

//序列化时并不会存储 $info 属性

$temp = serialize($boy);

echo $temp . PHP_EOL;

//反序列化时会调用 __wakeup() 函数

$boy = unserialize($temp);

//__wakeup() 组装的 $info

$boy->getInfo();

?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值