PHP 13 个常用魔术方法:
__construct、__destruct、__call 或 __callStatic、__get、__set、__isset、__unset、__toString、__clone、__autoload、__invoke、__sleep、__wakeup
1、__construct
构造方法
__construct
构造方法,当一个类被实例化创建对象时,会调用构造方法。
2、__destruct
构造方法
__destruct
析构方法, 当对象在销毁之前或失去对对象的引用时,会调用 析构方法。
3、__call 或 __callStatic
- 当调用一个未定义的或没有权限的成员方法时,会调用
__call
方法。(当在静态方法中调用一个未定义的或没有权限的成员方法时,则会调用__callStatic
方法。)- 如果本类找不到调用的成员方法,会去父类中找。
- 如果本类找不到
__call
方法,会去父类中找。
4、__get
当调用一个未定义的或非公有的成员属性时,会调用
__get
方法。
5、__set
当给一个未定义的或非公有的成员属性赋值时, 会调用
__set
方法。
6、__isset
当在一个未定义的或非公有的成员属性上调用
isset
函数时,会调用__isset
方法。
7、__unset
当在一个未定义或非公有的成员属性上调用
unset
函数时,会调用__unset
方法。
8、 __toString
在打印输出一个对象时, 会自动调用
__toString
方法。 例:echo 对象名
。
9、__clone
当克隆一个对象时, 会自动调用
__clone
方法。 例:$clone_obj = clone 对象名;
10、__autoload
在实例化一个尚未被定义的类时会自动调用
__autoload
来加载类文件。
11、__invoke
当尝试以调用函数的方式调用一个对象时, 会自动调用
__invoke
方法。
12、__sleep
serialize()
函数会检查类中是否存在__sleep
方法,如果存在,先执行__sleep
方法,再执行 序列化操作。<?php class User { public function __sleep(){ // } } $obj = new User(); serialize($obj);
13、__wakeup
unserialize()
函数会检查类中是否存在__wakeup
方法,如果存在,先执行__wakeup
方法,再执行 反序列化操作。<?php class User { public function __wakeup(){ // } } $obj = new User(); unserialize($obj);