假设我们有三个这样的类:
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”。 有什么主意吗? 谢谢。
答案 0 :(得分:0)
这很有趣,感谢您提出的有趣问题!
以下代码将使您能够从任何子类中获取根父级的第一个孩子。
class A {
public function name(){
return 'Undefined';
}
protected function identify_first_child() {
$root = self::class;
$node = static::class;
$parent = get_parent_class($node);
while ($parent !== $root) {
$node = $parent;
$parent = get_parent_class($parent);
}
return $node;
}
}
class B extends A {
public function name(){
return $this->identify_first_child();
}
}
class C extends B {
public function name(){
return $this->identify_first_child();
}
}
class D extends A {
public function name(){
return $this->identify_first_child();
}
}
class E extends D {
public function name(){
return $this->identify_first_child();
}
}
class F extends A {
public function name(){
return $this->identify_first_child();
}
}
$a = new A();
echo $a->name() . '<br>';
$b = new B();
echo $b->name() . '<br>';
$c = new C();
echo $c->name() . '<br>';
$d = new D();
echo $d->name() . '<br>';
$e = new E();
echo $e->name() . '<br>';
$f = new F();
echo $f->name() . '<br>';
这将输出以下内容:
Undefined
B
B
D
D
F