php 魔术方法总结
概述
- php 魔术方法是一种特殊的方法,当对对象执行某些操作时会覆盖 PHP 的默认操作
__construct()
构造函数
- 通常构造方法被用来执行一些有用的初始化任务,如对成员属性在创建对象时赋予初始值
- 在每个类中都有一个构造方法,如果没有显示地声明它,那么类中都会默认存在一个没有参数且内容为空的构造方法
例如:
1 |
|
__destruct()
析构函数
- php 的执行工作流是当前端进程调用后端的 php 程序阶段性完成时(例如页面加载完成,调用 php 也结束了),其中类就会逐一销毁,而该函数可以在销毁之前执行一些关闭文件,释放内存等结束性操作
例如:
1 |
|
重载方法
属性重载
__set()
- 在给不可访问( protected 或 private )或不存在的属性赋值时,
__set()
会被调用。
__get()
- 读取不可访问( protected 或 private )或不存在的属性的值时,__get()会被调用。
__isset()
- 当对不可访问( protected 或 private )或不存在的属性调用
isset()
或empty()
时,__isset()
会被调用。
__unset()
- 当对不可访问( protected 或 private )或不存在的属性调用
unset()
时,__unset()
会被调用。
方法重载
__call()
在对象中调用一个不可访问方法时,__call()
会被调用。
__callStatic()
在静态上下文中调用一个不可访问方法时,__callStatic()
会被调用。
__toString()
被当作字符串时调用方法
- 该方法用于一个类被当成字符串时应怎样回应。例如
echo $obj;
应该显示些什么。
例如:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// 声明一个简单的类
class TestClass
{
public $foo;
public function __construct($foo)
{
$this->foo = $foo;
}
public function __toString() {
return $this->foo;
}
}
$class = new TestClass('Hello');
echo $class;
//输出结果
Hello
__invoke()
方法
- 当尝试以调用函数的方式调用一个对象时,该方法会被自动调用
例如:
1 |
|
__sleep()
序列化特指方法
![[php 序列化及反序列化#序列化特别的魔术方法- __sleep()
]]
__wakeup()
反序列化变更方法
![[php 序列化及反序列化#反序列化特别的魔术方法- __wakeup()
]]