php如何获取当前类名,继承中的问题?

木有标题所说的那么简单!!


问题是 :

PHP中 A类继承了B类,如何在A类中获取B类的类名

实际使用状况是:

B类是一个基类,多个类A,C,D…..需要继承B类.我想在B类中写一些日志,来记录A类的运行情况

楼主提的问题好像是:

因为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

我的方式比较简单,在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类方法。

发表评论

电子邮件地址不会被公开。 必填项已用*标注