当前位置:Gxlcms > PHP教程 > php如何获取当前类名,继承中的问题?

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

时间: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

人气教程排行