PHP 子类如何使用父类中定义的魔术方法?
父类中定义了魔术方法,子类如何才能在子类中使用这些魔术方法呢?
假设我们有一个父类 p,它定义了以下魔术方法:
class p { private $name = ""; function __construct() { $this->name = "hello"; } public function __set($name, $value) { $this->$name = $value; } public function showname() { echo $this->name; } }
要在子类中使用这些魔术方法,需要以下步骤:
- 定义一个子类 c 继承父类 p。
- 在子类构造函数中调用父类构造函数。
- 在子类中对父类私有成员进行赋值,这将触发 __set() 魔术方法。
例如,以下子类 c 继承了父类 p 魔术方法:
class c extends p { function __construct() { parent::__construct(); $this->name = "你好"; } }
创建该子类的一个实例并调用 showname() 方法:
$c = new C; $c->showName();
由于子类继承了父类并调用了父类构造函数,因此子类也会初始化 $name 为 "hello"。随后,子类对 $name 进行赋值,这将触发 __set() 魔术方法,最终输出 "你好"。
这就是子类如何使用父类中定义的魔术方法。通过这种方式,子类可以扩展和增强父类的功能,而无需重新定义魔术方法。