2011-05-20 107 views
7

例如PHP獲取父類文件路徑

的index.php //我知道這個文件是

$class = new childclass(); 
$class->__initComponents(); 

somefile.php //我知道這個文件是

Class childclass extends parentclass { 

} 

someparentfile.php //我不知道這個文件在哪裏

Class parentclass { 
    function __initComponents(){ 
    //does something 
    } 
} 

我需要找出someparentfile.php在哪裏。

原因:

我調試一些困難的PHP代碼是別人寫的,我需要找出哪些文件包含定義一個類參數的代碼。

我覺得只要一個類的方法調用,這是否一個功能:

$class->__initComponents();//the parameter is defined somewhere in there 

的問題是,這個功能是上面$類的父類「MyClass的」中,我有不知道父類是哪裏。

有沒有一種方法或一些調試功能,通過它我可以找出這個父類的位置或至少在哪裏定義了參數?

p.s. 下載整個應用程序,然後使用文本搜索將是不合理的。

回答

10

您可以使用反射

$object = new ReflectionObject($class); 
$method = $object->getMethod('__initComponents'); 
$declaringClass = $method->getDeclaringClass(); 
$filename = $declaringClass->getFilename(); 

如需進一步信息,什麼是可能的反射API,見the manual

然而

,爲簡單起見,我建議下載源代碼和調試它本地。

+0

我知道reflectionobjects,但我不知道他們可以做到這一切。你爲我節省了無數小時的調試時間! :D我找到了我正在尋找的方法,但我仍然不知道MyClass在哪裏,它看起來像MyClass也是一個擴展類 – 2011-05-20 11:53:59

+0

'$ declaringClass'在我的例子中是類,它實現了方法。 '$ filename'是聲明類的文件名。如果你想知道'__initComponents()'在哪裏定義,那麼它也不在乎,如果'MyClass'也被擴展。如果你認爲,你可以使用'ReflectionClass :: getParentClass()'獲得父類,這對你有幫助。 – KingCrunch 2011-05-20 12:15:07

+0

它幫助我找到我需要的類(最外層的父類),而不是我認爲我需要的類(直接父類「MyClass」),現在使用getParentClass,我甚至找到了「MyClass」(我不需要,但很有趣),所以我修復了一大堆bug,現在一切正常:) – 2011-05-21 14:37:00

3
$object = new ReflectionObject($this); // Replace $this with object of any class. 

    echo 'Parent Class Name: <br>'; 
    echo $object->getParentClass()->getName(); 

    echo '<br>Parent Class Location: <br>'; 
    echo $object->getParentClass()->getFileName();