2011-12-03 257 views
8

假設我有兩個文件,每個文件都有一個類。在父類中如何獲取子類的文件名?獲取擴展類的文件名

文件2(子類):

class B extends A{ 

} 

文件1:

class A{ 

    final protected function __construct(){ 
    // here I want to get the filename where class B is, 
    // or whatever class is the child 
    } 

} 
+2

類是如何用該受保護的構造函數實例化的? – Phil

+0

你想要父類,神奇地知道一個單一的任意孩子類的位置,當它構造時?這不是一件容易的事情,並沒有任何目的。你究竟想要做什麼?有可能有更好的方法去實現您的實際最終目標。 –

回答

15

不能確定它提供什麼樣的目的,但在這裏你去:

class A{ 

    final protected function __construct(){ 
    $obj = new ReflectionClass($this); 
    $filename = $obj->getFileName(); 
    } 

} 
+0

不會[ReflectionObject](http://php.net/manual/en/class.reflectionobject.php)在那裏是正確的選擇嗎? – Phil

+0

您應該將構造函數的可訪問性更改爲'public'。 – webbiedave

+2

@webbiedave很難說出OP如何使用受保護的構造函數創建對象,但他們可能有其原因。也許他們在A' – Phil

3

你可以作弊和使用debug_backtrace

class A { 
    final protected function __construct() { 
    $stacktrace = @debug_backtrace(false); 
    $filename = $stacktrace[0]['file']; 
    } 
}