扩展后查找类名


Finding a class name after extending

我在扩展其他类后找到类名时遇到了麻烦。下面是相关的类:

class Home extends Controller {
       public function test() {
           Example::all();
       }
}

Class Example extends Active {
    //Variables
}
Class Active extends Database {
     public function all() {
        //This is where I need to store a variable containing the class name Example.
     }
}

我试图从类Home调用时检索类活动中的类示例的名称,但是我发现到目前为止,如果不添加额外的参数(我不想这样做),则不可能做到这一点。

您要找的是

  • get_called_class -"延迟静态绑定"类名

示例(演示)

class Home  {
       public function test() {
           Example::all();
       }
}
Class Example extends Active {
    //Variables
}
Class Active  {
     public static function all() {
        var_dump( get_called_class() );
     }
}

注意,我已经将Active::all的签名更改为static,因为静态调用非静态方法将引发E_STRICT警告。一般来说,您希望避免使用静态方法和后期静态绑定。

您是否尝试过从PHP的ReflectionObject类?看看这个方法

希望能有所帮助