PHP继承中$this关键字作用机制疑惑及无限递归问题求解
PHP继承中$this的指向与无限递归问题
核心概念:$this的本质
在PHP中,$this始终指向当前运行时的对象实例,而非定义该方法的类。无论方法是在父类还是子类中定义,只要通过某个对象实例调用,$this就指向那个具体的实例——这是PHP动态方法绑定(晚绑定)的特性。
你的代码递归流程分析
一步步拆解执行逻辑:
- 创建
Strawberry实例$strawberry,调用$strawberry->display() - 执行子类
Strawberry::display(),其中调用parent::intro()(即父类Fruit::intro()) - 在
Fruit::intro()中执行$this->display()——此时$this指向的是Strawberry实例,因此会调用子类的Strawberry::display()而非父类的Fruit::display() - 流程回到步骤2,形成无限递归,最终会因内存耗尽抛出错误
如何解决:强制调用父类方法
如果你希望在父类intro()中固定调用自己的display()方法,不要使用$this,而是用self::display()或者直接通过类名调用Fruit::display():
修改后的父类代码:
class Fruit { public function intro() { echo "In Fruit-intro"; self::display(); // 或 Fruit::display() } public function display() { echo "Fruit-display"; } }
补充:self::与$this->的区别
self:::静态绑定,指向定义该代码的类,无论运行时对象是什么类型,都调用当前类的方法$this->:动态绑定,指向当前运行的对象实例,会根据对象的实际类型调用对应类的方法
内容的提问来源于stack exchange,提问作者Arpit Jain
相关产品推荐
相关产品推荐

