木有标题所说的那么简单!!
问题是 :
PHP中 A类继承了B类,如何在A类中获取B类的类名
实际使用状况是:
B类是一个基类,多个类A,C,D…..需要继承B类.我想在B类中写一些日志,来记录A类的运行情况
回复内容:
木有标题所说的那么简单!!
问题是 :
PHP中 A类继承了B类,如何在A类中获取B类的类名
实际使用状况是:
B类是一个基类,多个类A,C,D…..需要继承B类.我想在B类中写一些日志,来记录A类的运行情况
我的方式比较简单,在
本文来源gao!%daima.com搞$代*!码$网3
搞代gaodaima码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(); // 输出: Aecho (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
-