__construct() 构造函数
__destruct() 析构函数
__call() 调用不存在的方法时调用
__callStatic() 静态函数里面调用不存在的方法时调用
__get() 对未定义的变量赋值时调用
__set() 读未定义的变量时调用
__isset() 对未定义的变量执行isset()时调用
__unset() 对未定义的变量执行unset()时调用
__toString() 允许以调用字符串的方法调用对象
__invoke() 允许以调用函数的方法调用对象
__set_state() 执行var_export返回的内容
__clone() 对象完全复制
使用情况:如果对象A中保存着对象B的引用,当你复制对象A时,你想其中使用的对象不再是对象B而是B的一个副本,那么 你必须得到对象A的一个副本。
__sleep() __wakeup()
serialize() 函数执行前会检查是否存在一个魔术方法 __sleep().如果存在,__sleep()方法会先被调用, 然后才执行序列化操作。这个功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法不返回任何内容,则NULL被序列 化,并产生 一个E_NOTICE错误。 __sleep()方法常用于提交未提交的数据,或类似的清理操作。同时,如果你有一些很大的对象, 不需要全部保存,这个功能就很好用。
与之相反,unserialize()会检查是否存在一个__wakeup()方法。如果存在,则会先调用 __wakeup方法,预先准备对象需要的资源。__wakeup()经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作