php获取类的名称

时间:2010-03-02 22:47:53

标签: php oop

对于在另一个内部调用的类,是否有办法知道外部类的名称?

示例:

class A{
  // need to get the name of B
  // some stuff
}

class B{
  $var = new A;
}

get_parent_class()由于B不是A的孩子,所以不做这项工作。

有什么建议吗?

编辑:对不起大家我不得不改变这个问题。我想问的是,A类可以知道调用它的类的名称。再次抱歉愚蠢的第一个问题。

4 个答案:

答案 0 :(得分:6)

不,这是不可能的。

好吧,差不多。你可以从debug_backtraceapd_callstack破解你的调用类,但这样效率低且速度慢。 Xdebug有许多功能可以帮助您实现这一目标,但所有这些都不是您想要的生产代码。

最简单的方法是将B的实例传递给A,例如

class A {
    protected $callerInstance;
    protected $callerClassName
    public function __construct($caller) {
        $this->callerInstance = $caller;
        $this->callerClassName = get_class($caller);
    }
}

答案 1 :(得分:2)

您需要get_class()

  

get_class - 返回对象类的名称

修改的 正如戈登所说,这是不可能的。您可能能够解析调用堆栈以查看所谓的那个类,但我不会这样做。

答案 2 :(得分:1)

如果将类B的名称传递给类A构造函数,则可以。这需要在A类(以及您需要的所有类)中进行修改。哈希,但做你需要的。

class A{
  function __construct($caller){
     echo $caller; // will echo B, C and D respectively
  }
}

class B{
   $var = new A(get_class($this));
}

class C{
   $var = new A(get_class($this));
}

class D{
   $var = new A(get_class($this));
}

答案 3 :(得分:0)

get_class($var)