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);