【问题标题】:call overwritten parent function from a child in php [duplicate]在php中从一个孩子调用覆盖的父函数[重复]
【发布时间】:2013-06-05 14:00:06
【问题描述】:

如何从子实例递归调用被覆盖的父函数?因为我没有使用静态方法,所以我不能使用parent::method(),但必须做一些不同的事情。我觉得有更好的方法来解决我的问题,也许是通过设计模式。这是我的班级结构:

class Creature {
    public function eat() {
        // feed and digest
    }
}

class Mammal extends Creature {
    public function eat() {
        // gather and chew
    }
}

class Human extends Mammal {
    public function eat() {
        // have a meal
    }
}

class WesternPerson extends Human {
    public function eat() {
        // use knife & fork
    }
}

$me = new WesternPerson();
$me->eat();

调用eat() 应该从特殊类递归地向上到非常抽象的类。最简单的方法是,如果我可以从被覆盖的函数中调用具有相同名称的父函数。但我知道,它被覆盖了,所以我不能。

【问题讨论】:

  • parent::method() 不是静态调用(虽然看起来有点像)。只需使用那个就可以了。
  • 非常感谢!由于:: 运算符,我显然很困惑。我现在清楚了。

标签: php class oop inheritance parent-child


【解决方案1】:

:: 不仅仅适用于静态方法。它是范围解析运算符。任何时候你想使用一个存在于你的上下文范围之外的范围内的函数时都可以使用它。

parentstaticself 是引用与您的调用范围相关的不同范围的语言结构。

所以在这种情况下

 parent::eat()

将在 WesternPerson::eat 上下文中调用 Human::eat(即 $this 将表示 Human::eat 上下文中的 WesternPerson 实例)

【讨论】:

    【解决方案2】:

    如 cmets 所述,调用 parent::eat() 就可以了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 2014-11-20
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多