对于在另一个内部调用的类,是否有办法知道外部类的名称?
示例:
class A{
// need to get the name of B
// some stuff
}
class B{
$var = new A;
}
get_parent_class()由于B不是A的孩子,所以不做这项工作。
有什么建议吗?
编辑:对不起大家我不得不改变这个问题。我想问的是,A类可以知道调用它的类的名称。再次抱歉愚蠢的第一个问题。
答案 0 :(得分:6)
不,这是不可能的。
好吧,差不多。你可以从debug_backtrace或apd_callstack破解你的调用类,但这样效率低且速度慢。 Xdebug有许多功能可以帮助您实现这一目标,但所有这些都不是您想要的生产代码。最简单的方法是将B的实例传递给A,例如
class A {
protected $callerInstance;
protected $callerClassName
public function __construct($caller) {
$this->callerInstance = $caller;
$this->callerClassName = get_class($caller);
}
}
答案 1 :(得分:2)
答案 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)