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