记录下PHP中的魔术方法
PHP中的魔术方法:程序在特定事件中自动调用的类方法(前提条件是类中定义了相应的魔术方法)。
__autoload()
首先说明下,该函数不叫魔术方法。当程序尝试加载未定义的类时自动调用该函数。
该函数已经不被推荐使用,建议使用spl_autoload_register()函数。
__construct()
名称构造方法,每当类创建新对象时会先调用该方法。 值得注意的是必须是创建新对象时才会触发(使用new关键字)。
__destruct()
名称析构方法,与构造方法对应。当某个对象所有引用都被删除或者当对象显示的的销毁时执行。
__call() / __callStatic()
当调用某个对象的方法不存在(或者不可访问)时会自动触发这两个方法中的一个。 那这两个函数有什么区别呢?
- 在类内部调用一个不存在的方法时,只会触发__call方法。
- 在类外部调用一个不可访问的方法时,静态方式调用的则触发__callStatic方法,反之则调用__call方法。
因为PHP没有重载概念,所以要实现相似功能可以通过该特性完成。
__get()
当读取对象不可访问的属性时,该方法被调用。
__set()
当给对象不可访问的属性赋值时,该方法被调用。
__isset()
当对对象的不可访问属性调用isset或empty函数时,该方法将被调用。
__unset()
当对对象的不可访问属性调用unset函数时,该方法将被调用。
__sleep()
当对象被序列化时(使用serialize),该方法将被调用。
__wakeup()
当序列化的对象被反序列化时(使用unserialize),该方法将被调用。
__toString()
当对象被当作字符串对待时(echo、print等),该方法将被调用。
__invoke()
当尝试以调用函数的方式调用一个对象时,该方法将被调用。
__set_state()
当使用函数var_export()函数导出类时,该方法将被调用。
__clone()
当使用clone关键字克隆对象时,该方法将被调用。
__debugInfo()
当对象被var_dump()函数调用时,该方法将被调用。