PHP 魔法方法

phpserver side programmingprogramming更新于 2025/8/19 19:52:17

简介

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 ([ $... ] ) : 混合

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

__set_state

static __set_state ( array $properties ) : object

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

__debugInfo

__debugInfo ( void ) : array

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

__set

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

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

__get

public __get ( string $name ) : mix

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

__isset

public __isset ( string $name ) : bool

在不可访问(受保护或私有属性(private)或不存在的属性。

__unset

public __unset ( string $name ) : void

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


相关文章