0
<?php
class a {
    public function foo() {
        echo __METHOD__ . PHP_EOL;
    }
}
class b extends a {
    public function foo() {
        $this->foo(); # I want to call a's foo method here.
        echo __METHOD__ . PHP_EOL;
    }
}
class c extends a {
    public function foo() {
        echo __METHOD__ . PHP_EOL;
        $this->foo(); # I want to call a's foo method here.
    }
}
class d extends a {
    # This class does not handle anything super special in our foo step, so I don't over write a's foo();
}
$a = new a; $a->foo();
$b = new b; $b->foo();
$c = new c; $c->foo();
$d = new d; $d->foo();
?>

我敢肯定,你们中的一些人会摸不着头脑,想弄清楚为什么我会想做这样的事情,所以我向你们保证,这将是有道理的,让我解释一下。

我有一个函数,它本身就可以正常工作,我还有一些其他类在基类上扩展以向它添加一些函数,这些类执行相同的任务,但在不同的上下文中或具有附加信息,因此它们必须完成所有父类的步骤,但在某些情况下他们还必须做一些特殊的子集。

有没有办法我仍然可以执行 a 的 foo 方法和我的子类 foo 方法?

我知道我可以用一些可怕的技巧来解决这个问题,比如将方法设为文件,然后在需要时将该文件包含在父函数和它的同级函数中,或者我可以创建第二个名为 bar() 的方法,其中包含以下指令foo() 并让我的子类覆盖 foo() 但在需要 foo() 的功能时调用 bar()。我只是想知道我是否可以在不使用一些非常有趣的技巧的情况下做到这一点,这里有人可以教我一些我不知道的 PHP 吗?

4

1 回答 1

3

你可以试试 parent::foo();

在 c 类中:

public function bar(){
  return parent::foo();
}

请参阅PHP 手册中关于范围解析的示例 3

于 2010-10-25T09:20:12.707 回答