以下は、クラス階層とコードの例です。私が探しているのは、 'ChildClass1'または 'ChildClass2'に静的メソッドwhoAmI()が各子クラスで再実装せずに呼び出されたかどうかを判断する方法です。静的メソッドでターゲットクラスを検出する方法はありますか?
<?php
abstract class ParentClass {
public static function whoAmI() {
// NOT correct, always gives 'ParentClass'
$class = __CLASS__;
// NOT correct, always gives 'ParentClass'.
// Also very round-about and likely slow.
$trace = debug_backtrace();
$class = $trace[0]['class'];
return $class;
}
}
class ChildClass1 extends ParentClass {
}
class ChildClass2 extends ParentClass {
}
// Shows 'ParentClass'
// Want to show 'ChildClass1'
print ChildClass1::whoAmI();
print "\n";
// Shows 'ParentClass'
// Want to show 'ChildClass2'
print ChildClass2::whoAmI();
print "\n";
@ S.Lott私は、そのようなメソッドが実際のコードで使用された場合、漏れやすい抽象であることに完全に同意します。この場合、方法は理解できるサンプルを提供するだけです。子クラスを決定したい理由は、クラス階層のすべてのメンバーが共有する静的インスタンス作成メソッドを利用できるようにするためですが、まだ適切な子コンストラクタを呼び出しています。 –