PHP 魔术方法


介绍

PHP 中的魔术方法是一些特殊的用于执行特定任务的方法。这些方法名称以双下划线(__)作为前缀。所有这些函数名都是保留字,不能用于与关联的魔术功能无关的任何其他目的。类中的魔术方法必须声明为 public。这些方法充当拦截器,在满足特定条件时会自动调用。

PHP 目前提供以下魔术方法:

__sleep

public __sleep ( void ) : array

类中的 serialize() 方法检查它是否具有名为 __sleep() 的函数。如果有,则在任何序列化之前执行该函数。它应该返回一个数组,其中包含应序列化的该对象的所有变量的名称。

__wakeup

public __wakeup ( void ) : void

unserialize() 方法检查是否存在一个名为 __wakeup() 的魔术函数。如果存在,则此函数可以重建对象可能拥有的任何资源。

__serialize

public __serialize ( void ) : array

serialize() 方法还会检查类是否具有 __serialize() 方法。如果有,则在任何序列化之前执行它。它必须构造并返回一个键值对的关联数组,这些键值对表示对象的序列化形式。

__unserialize

public __unserialize ( array $data ) : void

unserialize() 也检查 __unserialize() 是否存在,并且它将接收从 __serialize() 返回的已还原数组。然后,它可以根据需要从该数组中恢复对象的属性。

__toString

public __toString ( void ) : string

__toString() 方法描述对象的字符串表示形式。例如,echo $obj; 将打印什么。此方法必须返回一个字符串。

__invoke

__invoke ([ $... ] ) : mixed

当脚本尝试将对象作为函数调用时,将调用此方法。

__set_state

static __set_state ( array $properties ) : object

此静态方法用于由 var_export() 导出的类。它接收一个参数,该参数是一个数组,其中包含以数组('property' => value, ...) 形式导出的属性。

__debugInfo

__debugInfo ( void ) : array

当执行 var_dump() 以转储对象以获取应显示的属性时,会自动调用此方法。如果未定义,则将显示所有 public、protected 和 private 属性。

__set

public __set ( string $name , mixed $value ) : void

当写入不可访问(受保护的或私有的)或不存在的属性的数据时,将运行 __set()。

__get

public __get ( string $name ) : mixed

__get() 用于从不可访问(受保护的或私有的)或不存在的属性读取数据。

__isset

public __isset ( string $name ) : bool

调用不可访问(受保护的或私有的)或不存在的属性上的 isset() 或 empty() 时,将触发 __isset()。

__unset

public __unset ( string $name ) : void

当对不可访问(受保护的或私有的)或不存在的属性使用 unset() 时,将调用 __unset()。

更新于:2020年9月18日

9000+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告