2010-03-02 42 views
0

有沒有一種方法讓另一個類內部的類知道外部類的名字?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類能夠知道被調用的類的名稱。再次抱歉白癡的第一個問題。

+3

由於對您要做的事情似乎存在一些困惑,請優化問題。 – Gordon 2010-03-02 22:57:52

回答

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

我完全同意你的看法。不理解人們投票的原因。 – 2010-03-02 22:55:56

+1

@戈登你說得對,我們都搞錯了。 +1。 – 2010-03-02 22:59:02

+0

+1用於閱讀正確答案(並且正確答案爲c) – Yacoby 2010-03-02 23:03:03

2

你想get_class()

get_class - 返回一個對象的類

編輯的名字 戈登說,這是不可能的。你可能能夠解析調用堆棧來查看你所在的類是什麼類,但我不會這樣做。

1

如果你通過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)); 
}