PHP的魔术方法由__双下划线开头,并为保留格式。也就是意味着自己命名的任何方法都不可以用__开头。所有魔术方法必须被定义为public。
构造和析构
__construct
每次创建新对象时,先调用此方法,适用于对象的一些初始化操作。
注意:如果子类有定义构造函数,如果想执行父类构造。要加parent::__construct()。如果子类没有构造函数,则如普通函数一样从父类继承。
老式PHP构造函数可以为类名,PHP7已弃用。
__destruct
对象的所有引用被删除,或被显式销毁时执行。
注意:parent::__destruct同上
使用exit()停止时也会执行。
如果在__destruct中调用exit()则会报错。
方法重载 Method Overloading
以下四个不能被声明为static,否则报错。
__call(string $name, array $arguments)
调用不存在的方法时执行。
__callStatic(string $name, array $arguments)
调用不存在的静态方法时执行
对象复制
__clone()
复制完成时,新创建的对象(复制生成的新对象)执行这个方法。
如果希望阻止对象复制,则声明成private
属性重载 Property Overloading
属性重载开发环境中慎用!
__set(string $name, mixed $value)
赋值一个不可访问的属性时调用。
__get(string $name)
读取一个不可访问的属性时调用。
__isset($name)
对一个不可访问的属性执行isset()或者empty()时调用
__unset($name)
对一个不可访问的属性执行unset()时调用
被当做字符串
__toString
当一个对象被当做字符串时的执行,比如echo/print
被当做函数
__invoke()
当一个对象被当做函数使用时执行。比如$obj(5)。