PHP中常用魔术方法(学习笔记)

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)。

点赞