__construct() 构造函数
__destruct() 析构函数
__sleep() serialize序列化时调用
__wakeup() unserialize反序列化时调用
__clone() 检测克隆对象
属性重载的魔术方法:
set,get,sset,unset
__set() 当为不可访问的属性赋值时,会被自动调用 会得到两个参数,当前操作的属性名和属性值!
典型的,__set作用,用于严格控制对象结构,和批处理可以被修改的属性!
__get()
当访问不可访问的属性时,会被自动调用
需要的参数是:一个,为当前操作的属性名
__unset()
在删除一个不可访问的属性时,可以自动被调用!
需要一个参数 当前操作的属性名。
此时就可以利用业务逻辑完成 属性的删除处理!
__isset()
在判断一个不可访问的属性是否存在时,被自动调用
需要一个参数,属性名
注意,此函数需要返回true,或者false,表示属性是否存在:
方法重载的魔术方法:
__call()
当访问一个不可访问的对象方法时,会触发当前的魔术方法!
需要的参数:
2个参数,第一是当前的方法名,第二是调用时使用的实参列表!
典型的作用,
第一, 给出友好的提示
第二, 执行默认操作!
static __callStatic()
与 __call类似,当静态调用一个不可访问的方法时,会自动执行!
魔术方法,magic method
在特定的情况下,会被自动调用的方法,通常负责完成某块独立的功能的方法称之为魔术方法!
特点:
1,需要用户脚本定义,不定义不执行!
2,命名方式都是以__开头!
总结:
__construct
__destruct
__sleep
__wakeup
__set
__get
__isset
__unset
__clone
__call
__callStatic
__autoload()//魔术函数
__invoke()
将一个对象,当作函数调用时,会触发该对象的__invoke()方法,由此方法,就可以调用,没有该方法就不能调用!
回想匿名函数
为什么,匿名函数对象(Closure类对象)可以,但是普通类对象不行?
PHP内置Closure类中有__invoke()方法:__invoke是 php实现匿名函数 不可或缺的部分!
__toString()
转换到字符串的意思!
当将对象当作字符串使用时,会自动调用该对象的魔术方法!