2008-10-14 3 views
0

я могу в данный момент на следующее:Resolve имя файла из другого файла

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

Вы можете использовать Reflection.

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

Э-э, не совсем, о чем я могу думать. В каждом подклассе должен быть явно реализован метод, который возвращает __FILE__, что в первую очередь полностью поражает точку наследования.

Мне также очень любопытно, почему что-то подобное было бы полезно.

+0

Я создаю структуру, которая должна быть способна рассказать обо всех двух классах с одинаковыми именами и дать им уникальные и последовательные идентификаторы. В настоящее время я делаю pass-the -__ FILE __-trick и строю идентификатор из этого пути. Пространства имен могут помочь, но они слишком новы для моих нужд. – 2008-10-14 18:48:14

+0

Теперь я действительно смущен. Два класса с тем же именем? Вы не получите ошибку «Невозможно переопределить класс»? Или вы на самом деле планируете метапрограммирование каждого файла? – 2008-10-14 19:52:08

Смежные вопросы