如何在php中获取(超级)父类中第一个被调用的子类的名称
假设我们有三个这样的类:如何在php中获取(超级)父类中第一个被调用的子类的名称,php,Php,假设我们有三个这样的类: class A { public function name(){ echo get_called_class(); } } class B extends A { public function name(){ parent::name(); } } class C extends B { public function name(){ parent::name();
class A {
public function name(){
echo get_called_class();
}
}
class B extends A {
public function name(){
parent::name();
}
}
class C extends B {
public function name(){
parent::name();
}
}
$c = new C();
$c->name(); //Result is C
如果运行此代码,结果将为“C”。
但是,我需要第一个孩子的名字“B”。
有什么想法吗?
谢谢。这是一个有趣的问题,谢谢你提出的有趣的问题 下面的代码将使您能够从任何子类获取根父类的第一个子类
A类{
公共函数名(){
返回“未定义”;
}
受保护函数标识\u第一\u子项(){
$root=self::class;
$node=static::class;
$parent=get\u parent\u类($node);
而($parent!==$root){
$node=$parent;
$parent=get\u parent\u类($parent);
}
返回$node;
}
}
B类扩展了A类{
公共函数名(){
返回$this->identify_first_child();
}
}
C类扩展到B类{
公共函数名(){
返回$this->identify_first_child();
}
}
类D扩展了{
公共函数名(){
返回$this->identify_first_child();
}
}
E类扩展为D类{
公共函数名(){
返回$this->identify_first_child();
}
}
类F扩展了A{
公共函数名(){
返回$this->identify_first_child();
}
}
$a=新的a();
echo$a->name()。'
';
$b=新的b();
echo$b->name()。'
';
$c=新的c();
echo$c->name()
';
$d=新的d();
echo$d->name()
';
$e=新的e();
echo$e->name()
';
$f=新的f();
echo$f->name()
';
这将输出以下内容:
Undefined
B
B
D
D
F
非常感谢@ArchCodeMonkey!这是一个有趣的解决方案,很有效。