木有标题所说的那么简单!!
问题是 :
PHP中 A类继承了B类,如何在A类中获取B类的类名
实际使用状况是:
B类是一个基类,多个类A,C,D.....需要继承B类.我想在B类中写一些日志,来记录A类的运行情况
立即学习“PHP免费学习笔记(深入)”;
木有标题所说的那么简单!!
问题是 :
PHP中 A类继承了B类,如何在A类中获取B类的类名
实际使用状况是:
B类是一个基类,多个类A,C,D.....需要继承B类.我想在B类中写一些日志,来记录A类的运行情况
立即学习“PHP免费学习笔记(深入)”;
我的方式比较简单,在B类中定义一个属性,B的构造函数里__CLASS__赋值给这个属性,子类里调用这个属性就知道B的类名了。
代码:
class B{
<code> protected $name = '';
public function __construct(){
$this->name = __CLASS__;
}
}
class A extends B{
public function _show(){
echo $this->name;
}
}
$temp = new A();
$temp->_show();</code>
定义一个函数就行了呗。
基类和子类是可以互相调用的。
你在B类(字类)写一个函数:
<code>private function getChildName(){
return __CLASS__;
}
</code>你在A类(基类)调用即可:
<code>$this->getChildName();</code>
多个继承要想在子类获取父类名 1.使用反射 2.使用回调(包括子父类间调用) 3.在父类定义self类方法。
楼主提的问题好像是:
因为A,C,D都是继承的B,但是B里面的函数需要得到「是A,还是C」?
<code>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</code>如果你的需求是在A里面,得知继承的谁,这可以用到反射了
<code>// 类外获得
$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);</code>> 更多信息,自己看
调试
debug_backtrace
反射
ReflectionClass
函数
get_called_class
get_class
get_class_methods
get_class_vars
get_object_vars
get_parent_class
method_exists
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号