__construct(), __destruct(),
__call(), __callStatic(),
__get(), __set(),
__isset(), __unset(),
__sleep(), __wakeup(),
__toString(),__invoke(),
__set_state(), __clone() 和 __debugInfo()
等方法在 PHP 中被称为"魔术方法"(Magic methods)。在命名自己的类方法时不能使用这些方法名,除非是想使用其魔术功能。
serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。
此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组。如果该方法未返回任何内容,则null 被序列化,并产生一个E_NOTICE级别
__construct() 具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。
__destruct() 析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。
__call() 在对象中调用一个不可访问方法时,__call() 会被调用。
__callStatic() 在静态上下文中调用一个不可访问方法时,__callStatic() 会被调用。
__get() 读取不可访问属性的值时,__get() 会被调用。
__set() 在给不可访问属性赋值时,__set() 会被调用。
__isset() 当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。
__unset() 当对不可访问属性调用 unset() 时,__unset() 会被调用。
__sleep() 方法常用于提交未提交的数据,或类似的清理操作。
(serialize() 函数会检查类中是否存在一个魔术方法 __sleep()。如果存在,该方法会先被调用,然后才执行序列化操作。)
__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作
unserialize() 会检查是否存在一个 __wakeup() 方法
__clone() 对象复制可以通过 clone 关键字来完成
__debuginfo() 这种方法被称为var_dump()当一个对象获得倾销应显示的属性,如果方法不是对对象的定义,那么所有的公共和私人财产,保护将显示
__toString() 方法用于一个类被当成字符串时应怎样回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串,否则将发出一条E_RECOVERABLE_ERROR 级别的致命错误。
__invoke() 当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。
__set_state() 当调用 var_export() 导出类时,此静态 方法会被调用。本方法的唯一参数是一个数组,其中包含按 array(‘property’ => value, …) 格式排列的类属性。