有沒有一種方法讓另一個類內部的類知道外部類的名字?php得到這個類的名字
例子:
class A{
// need to get the name of B
// some stuff
}
class B{
$var = new A;
}
get_parent_class() qon't做,因爲B的作業是不是A.
任何建議的一個孩子?
編輯:對不起,我不得不改變這個問題。我想問的是,A類能夠知道被調用的類的名稱。再次抱歉白癡的第一個問題。
有沒有一種方法讓另一個類內部的類知道外部類的名字?php得到這個類的名字
例子:
class A{
// need to get the name of B
// some stuff
}
class B{
$var = new A;
}
get_parent_class() qon't做,因爲B的作業是不是A.
任何建議的一個孩子?
編輯:對不起,我不得不改變這個問題。我想問的是,A類能夠知道被調用的類的名稱。再次抱歉白癡的第一個問題。
不,不可能。
好吧,差不多。你可以從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);
}
}
我完全同意你的看法。不理解人們投票的原因。 – 2010-03-02 22:55:56
@戈登你說得對,我們都搞錯了。 +1。 – 2010-03-02 22:59:02
+1用於閱讀正確答案(並且正確答案爲c) – Yacoby 2010-03-02 23:03:03
get_class($var)
如果你通過B類的名稱類的構造這是可能的。這將需要對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));
}
由於對您要做的事情似乎存在一些困惑,請優化問題。 – Gordon 2010-03-02 22:57:52