2013-04-01 125 views
3

說我有這個類哪個孫子打電話給我?

class Grandpa 
{ 
    public function call(){ 
     // Well, I want to know who calls me here 
    } 
} 

class Father extends Grandpa 
{ 
} 

class GrandsonOne extends Father 
{ 
} 

class GrandsonTwo extends Father 
{ 
} 

現在,我調用函數從孫子類,像這樣:

GrandsonOne::call(); 
GrandsonTwo::call(); 

我怎樣才能找出誰叫什麼名字?

+3

我認爲你的GradsonOne clss必須延伸到Father/Grandp。 –

+3

當你打電話給別人時,你不會讓他們猜測誰在打電話嗎?你告訴他們。 – vascowhite

+1

這是構建PHP ORM時不得不面對的一大難題。我認爲這個功能是在路線圖上,所以現在可能它已經存在,但是當時我只需要把它吸了起來,併爲父方法添加一個「$ subclass」參數,然後在子節點上覆蓋它。這很糟糕,但它是當時唯一的選擇... – Matchu

回答

7

你在找什麼是get_called_class功能。從PHP文檔: -

Gets the name of the class the static method is called in. 

所以

class Grandpa 
{ 
    public function call() 
    { 
     // Well, I want to know who calls me here 
     echo get_called_class(); 
    } 
} 

將輸出稱爲類的名稱。

+0

這就是我所需要的。我不知道我是如何在文檔中錯過的。謝謝你,蘇勒曼! – Michael

+1

是的。即使你正在實例化一個對象並調用父函數,它也可以工作。 –