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();
?>

なぜ私がこのようなことをしたいのか頭を悩ませている人が何人かいると思います。

私はそれ自体で問題なく動作する関数を持っており、基本クラスを拡張していくつかの関数を追加する他のクラスをいくつか持っています。これらのクラスは同じタスクを実行しますが、異なるコンテキストまたは追加情報を使用してすべてを実行する必要があります親クラスのステップの一部ですが、場合によっては特別なサブセットも実行する必要があります。

foo メソッドとサブクラスの foo メソッドを引き続き実行する方法はありますか?

メソッドをファイルにして、そのファイルを必要に応じて親関数とその兄弟の両方に含めるなどのひどいハックでこれを修正できることはわかっています。 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 に答える