首页 > 代码库 > 面向对象之魔术方法

面向对象之魔术方法

魔术方法是一种特殊的系统定义的函数方法,写在我们自定义的类中,不需要我们去调用,满足条件后自动调用。PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法。所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀。魔术方法现有15种,__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo() 等。①在对象中调用一个不可访问方法时,__call() 会被调用。 ②用静态方式中调用一个不可访问方法时,__callStatic() 会被调用③在给不可访问属性赋值时,__set() 会被调用。 ④读取不可访问属性的值时,__get() 会被调用。 ⑤当对不可访问属性调用 isset() 或 empty() 时,__isset() 会被调用。 ⑥当对不可访问属性调用 unset() 时,__unset() 会被调用。 ⑦__sleep() 方法常用于提交未提交的数据,或类似的清理操作。同时,如果有一些很大的对象,但不需要全部保存,这个功能就很好用。 ⑧__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。⑨__toString() 方法用于一个类被当成字符串时应怎样回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串,否则将发出一条 E_RECOVERABLE_ERROR 级别的致命错误。⑩当尝试以调用函数的方式调用一个对象时,__invoke() 方法会被自动调用。11. PHP 5.1.0 起当调用 var_export() 导出类时,此静态 方法会被调用。 本方法的唯一参数是一个数组,其中包含按 array(‘property‘ => value, ...) 格式排列的类属性。12.当复制完成时,如果定义了 __clone() 方法,则新创建的对象(复制生成的对象)中的 __clone() 方法会被调用,可用于修改属性的值(如果有必要的话)。13.__debugInfo(),这种方法被称为var_dump()当倾销对象得到应显示的属性。如果该方法未在对象上定义,则将显示所有公共的、受保护的和私有的属性。

面向对象之魔术方法