总的来说, 有下面几个魔术函数
__construct() __destruct() __get() __set() __isset() __unset() __call() __callStatic()
__sleep() __wakeup() __toString() __set_state() __clone() __autoload()
__construct()当实例化一个对象的时候,这个对象的这个方法首先被调用。
__destruct()当删除一个对象或对象操作终止的时候,调用该方法。
__set()在给不可访问属性赋值时会被调用。
__get()读取不可访问属性的值时会被调用。
__isset()当对不可访问属性调用 isset()或 empty()时,会被调用。
__unset()当对不可访问属性调用 unset()时会被调用。
__sleep当进行序列化对象时候调用
__wakeup当进行反序列对象时候调用
__toString当直接打印一个对象的时候,这个方法将会被调用
__call($func, $param) 当尝试调用一个不存在的方法的时候被调用. 这个方法必须有两个参数,第一个为调用的方法名,第二个是一个被调用方法的参数数组。
__callStatic()当尝试调用一个不存在的静态方法的时候被调用.这个方法必须有两个参数,第一个为调用的方法名,第二个是一个被调用方法的参数数组。
__set_state()当用var_export导出实例的时候被调用
__clone()当克隆实例时候被调用.
__autoload()函数.当创建一个实例化的时候,如果对应的类不存在,则会被调用。(可跟spl_autoload_register() 做一下比较)