楼主提的问题好像是:
因为A,C,D都是继承的B,但是B里面的函数需要得到「是A,还是C」?
class Base {
public function log() {
// 目标类,输出:A、C
echo static::class;
//echo get_called_class();
//echo get_class($this);
// 基类,输出:Base
//echo __CLASS__;
//echo self::class;
}
}
class A extends Base {}
class C extends Base {}
echo (new A)->log(); // 输出: A
echo (new C)->log(); // 输出: C
如果你的需求是在A里面,得知继承的谁,这可以用到反射了
// 类外获得
$a = new A();
echo get_parent_class($a);
//类中获得
class C extends Base {
public function log1() {
echo get_parent_class($this);
}
}
// 反射,取出所有extends的父级
// 如上,在C类中,$a换成$this即可
$class = new ReflectionClass($a);
$parents = [];
while ($class = $class->getParentClass()) { // 查询 implements 用 getInterfaces
$parents[] = $class->getName();
}
print_r($parents);
> 更多信息,自己看
调试
debug_backtrace
反射
ReflectionClass
函数
get_called_class
get_class
get_class_methods
get_class_vars
get_object_vars
get_parent_class
method_exists