PHP中的魔术方法

From: http://duanshaozhen.iteye.com/

常用的魔术方法有:

__construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state(), __clone() 和 __debugInfo()

自己对魔术方法的一些理解:
1、php对象在某些特定操作的时候,会调用特定的魔术方法。如构造对象时调用__construct()。
2、在面向对象编程时,__call()会有比较大的用处。对于__call()的解释:在对象中调用一个不可访问方法时,__call() 会被调用。一些框架中,通过__call()将路由信息和对象方法联系到一起,比如CI框架。
3、关于__clone()的用途:当复制完成时,如果定义了 __clone() 方法,则新创建的对象(复制生成的对象)中的 __clone() 方法会被调用,可用于修改属性的值(如果有必要的话)。


From: http://duanshaozhen.iteye.com/
PHP 中的魔术方法是一些具有特殊名称的方法,它们在特定的情况下会被自动调用。以下是一些常见的 PHP 魔术方法介绍: ### __construct 构造方法 在创建对象时自动调用,通常用来对成员属性进行初始化赋值。在同一个类中只能声明一个构造方法,因为 PHP 不支持构造函数重载。构造方法名称是以两个下画线开始的 `__construct()`。示例代码如下: ```php class Person { public $name; public $age; public $sex; /** * 显示声明一个构造方法且带参数 */ public function __construct($name="", $sex="男", $age=22) { $this->name = $name; $this->sex = $sex; $this->age = $age; } /* * say 方法 */ public function say() { echo "我叫:" . $this->name . ",性别:" . $this->sex . ",年龄:" . $this->age; } } ``` ### __destruct 析构方法 当类被销毁时自动触发,也可以使用 `unset` 方法触发该方法。示例代码如下: ```php class autofelix { public function __destruct() { echo '我准备销毁你了'; } } $a = new autofelix(); unset($a); // 即可输出:我准备销毁你了 ``` ### __clone 克隆方法 用于对象的克隆操作,当使用 `clone` 关键字克隆一个对象时,该方法会被自动调用。 ### __call 非静态调用方法 当调用一个对象中不存在的非静态方法时,该方法会被自动调用。 ### __callStatic 静态调用方法 当调用一个类中不存在的静态方法时,该方法会被自动调用。 ### __debugInfo 打印方法 当使用 `var_dump()` 打印对象时,该方法会被自动调用,可以自定义对象的输出信息。 ### __get 获取成员属性方法 当访问一个对象中不存在或不可访问的属性时,该方法会被自动调用。 ### __isset 方法 当对一个对象中不存在或不可访问的属性使用 `isset()` 或 `empty()` 函数时,该方法会被自动调用。 ### __set 方法 当给一个对象中不存在或不可访问的属性赋值时,该方法会被自动调用。 ### __invoke 方法 当把对象当作函数调用时,该方法会被自动调用。 ### __sleep 方法 在使用 `serialize()` 函数序列化对象时,该方法会被自动调用,可以指定需要序列化的属性。 ### __toString 方法 当把对象当作字符串使用时,该方法会被自动调用,需要返回一个字符串。 ### __unset 方法 当对一个对象中不存在或不可访问的属性使用 `unset()` 函数时,该方法会被自动调用。 ### __wakeup 方法 在使用 `unserialize()` 函数反序列化对象时,该方法会被自动调用。 ### __set_state() 用于处理 `var_export()` 函数导出的对象状态。 ### __debugInfo() 用于自定义 `var_dump()` 输出对象时的信息。 需要注意的是,除了 `__construct()`、`__destruct()` 和 `__clone()` 之外的所有魔术方法都必须声明为 `public`,否则会发出 `E_WARNING`。在 PHP 8.0.0 之前没有为魔术方法 `__sleep()`、`__wakeup()`、`__serialize()`、`__unserialize()`、`__set_state()` 发出诊断信息 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值