下面是一个示例类层次结构和代码。我正在寻找的是一种确定'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我完全同意,如果在真实代码中使用这种方法将是一个漏洞抽象。在这种情况下,该方法就是提供可理解的样本。我想确定子类的原因是,我可以使用静态实例创建方法,这些方法由类层次结构的所有成员共享,但仍然调用相应的子构造函数。 – 2009-09-06 03:54:30