时间:2021-07-01 10:21:17 帮助过:45人阅读
问题是 :
PHP中 A类继承了B类,如何在A类中获取B类的类名
实际使用状况是:
B类是一个基类,多个类A,C,D.....需要继承B类.我想在B类中写一些日志,来记录A类的运行情况
木有标题所说的那么简单!!
问题是 :
PHP中 A类继承了B类,如何在A类中获取B类的类名
实际使用状况是:
B类是一个基类,多个类A,C,D.....需要继承B类.我想在B类中写一些日志,来记录A类的运行情况
我的方式比较简单,在B类中定义一个属性,B的构造函数里__CLASS__赋值给这个属性,子类里调用这个属性就知道B的类名了。
代码:
class B{
protected $name = '';
public function __construct(){
$this->name = __CLASS__;
}
}
class A extends B{
public function _show(){
echo $this->name;
}
}
$temp = new A();
$temp->_show();
定义一个函数就行了呗。
基类和子类是可以互相调用的。
你在B类(字类)写一个函数:
private function getChildName(){
return __CLASS__;
}
你在A类(基类)调用即可:
$this->getChildName();
多个继承要想在子类获取父类名 1.使用反射 2.使用回调(包括子父类间调用) 3.在父类定义self类方法。
楼主提的问题好像是:
因为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