Home > Backend Development > PHP Tutorial > How to get the current class name in php, what's the problem with inheritance?

How to get the current class name in php, what's the problem with inheritance?

WBOY
Release: 2016-09-29 09:33:03
Original
1325 people have browsed it

It’s not as simple as the title says!!


The question is:

Class A inherits class B in PHP. How to get the class name of class B in class A

Actual usage conditions are:

Class B is a base class, and multiple classes A, C, D... need to inherit class B. I want to write some logs in class B to record the operation of class A

Reply content:

It’s not as simple as the title says!!


The question is:

Class A inherits class B in PHP. How to get the class name of class B in class A

Actual usage conditions are:

Class B is a base class, and multiple classes A, C, D... need to inherit class B. I want to write some logs in class B to record the operation of class A

My method is relatively simple, define an attribute in class B, assign __CLASS__ to this attribute in the constructor of B, and call this attribute in the subclass to know the class name of B.
Code:
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>
Copy after login

Just define a function.
Base class and subclass can call each other.

You write a function in class B (word class):

<code>private function getChildName(){
    return __CLASS__;
}
</code>
Copy after login

You can call it in class A (base class):

<code>$this->getChildName();</code>
Copy after login

If you want to get the parent class name in a child class with multiple inheritances, 1. Use reflection 2. Use callbacks (including calls between child and parent classes) 3. Define the self class method in the parent class.

The question raised by the poster seems to be:

Because A, C, and D all inherit B, but the function in B needs to know "Is it A or 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>
Copy after login

If your need is in A, to know who inherits, you can use reflection

<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>
Copy after login

> More information, see for yourself

  • Debugging

    • debug_backtrace

  • Reflection

    • ReflectionClass

  • Function

    • get_called_class

    • get_class

    • get_class_methods

    • get_class_vars

    • get_object_vars

    • get_parent_class

    • method_exists

Related labels:
php
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template