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

在PHP中,当一个类A继承自B类时,如何在A类内部获取B类的名称?这个问题可以通过在B类构造函数中使用`__CLASS__`常量并将值赋给一个属性来解决。然后在A类中访问该属性即可获取B类的名称。此外,还可以使用`get_parent_class()`函数,或者通过反射和回调方法来获取父类名称。在多继承的情况下,可以使用反射获取所有父类的名称。
摘要由CSDN通过智能技术生成

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

问题是 :

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

相关标签:php

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值