起序:做 Web
题的遇到的,总结总结。
一、方法列举
就写了几个常用的,其他的可以搜一下。
魔术方法 | 含义及调用时期 |
---|---|
__construct() | 创建对象时会自动调用(构造函数) |
__destruct() | 对象操作执行完毕后自动执行(销毁函数) |
__sleep() | 使用 serialize() 时触发 |
__wakeup() | 使用 unserialize() 时触发 |
__toString() | 把类当作字符串使用时触发 |
二、方法执行
代码展示
<?php
header("Content-type: text/html; charset=utf-8");
class People
{
public $name = "ANYQ";
public function __construct(){
echo " __consrtuct() run <br>";
}
public function __destruct(){
echo " __destruct() run <br>";
}
public function __wakeup(){
echo " __wakeup() run <br>";
}
public function __sleep(){
echo " __sleep() run <br>";
return array();
}
function __toString(){
echo " __toString run <br>";
}
}
# 实例一个对象
$person = new People();
# 序列化
$person_ser = serialize($person);
# 反序列化
$person_unser = unserialize($person_ser);
?>
执行结果
光这样看,不是很明确
魔术方法
执行的情况,我尽量详细的说一下上述图片中魔术方法
执行的情况:
__construct()
和__destruct()
在一个对象
创建和销毁的时候一定会执行;serialize()
会调用__sleep()
,可以理解为将对象序列化成字符串
之后,对象 “睡觉” 的过程;unserialize()
会调用__wakeup()
,可以理解为将字符串反序列化对象
之后,对象 “醒来” 的过程,恢复成一个新的对象之后,是没有__construct()
的,但有__destruct()
方法,所以会有一个__destruct()
执行输出。
如果对您有帮助,点个赞再走吧。