【发布时间】:2010-10-25 09:14:31
【问题描述】:
<?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()。我只是想知道我是否可以在不使用一些非常有趣的 hack 的情况下做到这一点,这里有人可以教我一些我不知道的 PHP 吗?
【问题讨论】: