2011-05-20 21 views
7

örnekphp olsun üst sınıf dosyası yolu

index.php // Bu dosya, bu dosya

Class childclass extends parentclass { 

} 
olduğunu

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

somefile.php // biliyorum nerede olduğunu

someparentfile.php // Bu dosyanın nerede olduğunu bilmiyorum

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

someparentfile.php dosyasının nerede olduğunu bulmam gerekiyor.

nedeni:

başkası, ben dosyanın bir sınıf parametresi tanımlayan kod içeren öğrenmek gerek yazdığı bazı zor php kod hata ayıklama.

Ben bildiğim kadarıyla bir sınıf yöntemi olarak bunu yapar bir işlevi çağıran bulundu:

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

sorun bu fonksiyon yukarıdaki $ sınıfının bir üst sınıf "Sınıfım" içinde olduğunu ve ben olması Ebeveyn sınıfının nerede olduğu hakkında bir fikir yok.

Bu üst sınıfın yerini veya en azından parametrenin tanımlandığı yeri bulabileceğim bir yol veya bazı hata ayıklama işlevi var mı?

p.s. Tüm uygulamayı indirdikten sonra metin aramayı kullanmak mantıksız olur.

cevap

10

Sen ne Yansıma-API ile mümkün olmaktadır, basitlik uğruna Ancak the manual

fazla bilgi için bkz yansıma

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

kullanabilirsiniz, ben kaynak ve hata ayıklama indirmek için önermek o yerel.

+0

Ben yansıtma nesnesini biliyordum, ama bunların hepsini yapabileceklerini bilmiyordum. Beni sayısız saatlerce hata ayıklama kaydettiniz! : D aradığım yöntemi buldum, ama yine de MyClass'ın nerede olduğunu bilmiyorum, benim örneğim de MyClass'ın genişletilmiş bir sınıf olduğu gibi görünüyor –

+0

'$ declaringClass' örneğidir sınıf, yöntemi uygular. '$ filename', sınıfın bildirildiği dosya adıdır. 'MyClass' da genişletilirse, eğer bilmek istiyorsanız, __initComponents() 'ın tanımlandığı umurunda değil. Varsayalım, eğer varsa, bu size yardımcı olacağını varsayarak, ReflectionClass :: getParentClass() 'yi kullanabilirsiniz. – KingCrunch

+0

İhtiyacım olan sınıfı (ana en üstteki) bulmamı sağladım, ihtiyacım olduğunu düşündüğüm sınıfı değil (doğrudan ana "MyClass"), şimdi getParentClass ile "MyClass" ı da buldum (ki buna ihtiyacım yoktu. , ama bulmak eğlenceli oldu, bu yüzden bir ton hata düzeltildi ve her şey yolunda :) –

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();