私は、クラスツリーの中で多くのクラスがハイレベルになっている、つまり多くの親クラスを持っているPHPプロジェクトに取り組んでいます。いくつかのレベルではクラスとそのサブクラスのインスタンスの間のサブクラスのパスを見つける方法は?
、私は私につながるすべてのサブクラスの配列を与えるクラスFood
のメソッドgetFoodClasses()
を実装するサブクラスとサブサブクラスなどのかなり多くを持つクラスFood
がある考えます現在のインスタンス、つまり、クラスFood
のツリーと、現在のインスタンス(後者を含む)のクラスです。 Food
クラス自体とそのすべてのスーパークラスを結果に含めないでください。
例:Food
のサブクラスは、次にサブクラスBanana
を有するサブクラスFruit
を有するVegetable
、あろう場合には、(Banana) $b->getFoodClasses()
上の結果は、 `アレイ(「野菜」、「果物」をもたらすことが必要であり、 'バナナ')。
ので、その結果
class Food extends SomeBaseClass
{
public function getFoodClasses()
{
/* Here goes the magic! */
}
}
class Vegetable extends Food {}
class Fruit extends Vegetable {}
class Banana extends Fruit {}
$b = new Banana;
print_r($b->getFoodClasses());
:リフレクションを使用しない
Array
(
[0] => Vegetable
[1] => Fruit
[2] => Banana
)
PHP組み込み関数も同様にこれを実現できることは非常にうれしいです。現時点ではSPLの使い方は好きではありませんが、あなたのコードを見れば、まさにそれがやるべきことをするようです。パフォーマンスの面でどれが好ましいかを知るには、両方の実装でベンチマークを行うのが理想的です。 –