2008-10-14 71 views
0

目前可以向以下我:解決文件名

class SubClass extends SuperClass { 
    function __construct() { 
    parent::__construct(); 
    } 
} 

class SuperClass { 
    function __construct() { 
    // this echoes "I'm SubClass and I'm extending SuperClass" 
    echo 'I\'m '.get_class($this).' and I\'m extending '.__CLASS__; 
    } 
} 

我願做文件名類似的東西(__FILE__,但動態評估);我想知道從超類中得到的子類是什麼文件。有沒有可能以優雅的方式?

我知道你可以用get_included_files()做些事情,但這不是很有效,特別是如果我有很多實例。

回答

2

您可以使用反射。

$ref = new ReflectionObject($this); 
$ref->getFileName(); // return the file where the object's class was declared 
0

呃,不是真的,我能想到。每個子類都需要有一個明確實現的方法返回__FILE__,這首先完全破壞了繼承點。

我也很好奇爲什麼這樣的事情會有用。

+0

我創建了一個框架,應該能夠區分具有相同名稱的兩個類,併爲它們提供唯一且一致的標識符。目前,我正在執行傳遞-__ FILE __-技巧,並從路徑構造所述標識符。命名空間可能會有所幫助,但它們對我的需求來說太新了。 – 2008-10-14 18:48:14

+0

現在我真的很困惑。兩個同名的班級?你不會得到一個「無法重新聲明類」的錯誤嗎?或者你真的計劃對每個文件進行元編程? – 2008-10-14 19:52:08