Правильный способ использования макроса в PHP для __FILENAME__ в вызываемой функции

#php #codeigniter #macros #phpunit

#php #codeigniter #макросы #phpunit

Вопрос:

Я работаю с PHPUnit внутри CodeIgniter и создал метод поддержки, который позволяет мне динамически выводить мои выходные данные в файл, названный в честь вызывающей функции, с файлом, хранящимся в дереве каталогов, идентичном пути вызывающего файла.

Функция работает замечательно (реализована из CIUnit_TestCase) и в настоящее время вызывается как таковая:

 $this->dumpOutputToFile($out, __FILE__, __CLASS__, __FUNCTION__);
  

Я бы предпочел делать что-то вроде

 $this->dumpOutputToFile($out);
  

или даже (хотя все еще несколько хакерский)

 $this->dumpOutputToFile($out, $this);
  

Проблема в том, что в методе «dumpOutputToFile ()» волшебные макросы больше не существуют (конечно), и, к сожалению, использование debug_backtrace () не помогает, поскольку изнутри возвращаемые значения не включают атрибуты ‘file’ или ‘line’ (хотя они доступны вне вызова.)

Итак, я ищу самый чистый / простой способ реализовать вызов dumpOutputToFile() с минимальным использованием параметров и т. Д.

Макрос был бы хорош, но они недоступны. Использование debug_backtrace было бы хорошо, но оно не предоставляет правильную информацию изнутри. Я также слышал, что XDebug немного упрощает для меня в этом направлении, но у меня еще не было пропускной способности для его установки.

Вот пример кода, который я использую внутри функции для доступа к значениям:

 $myDbg = debug_backtrace();
print "Printing array keys 'inside' ({$myDbg[0]['function']}) function:n";
print_r(array_keys($myDbg['0']));

print "nnPrinting array keys to 'parent' ({$myDbg[1]['function']}) function:n";
print_r(array_keys($myDbg['1']));
  

И результаты, которые я получаю… нужные мне значения недоступны для вызывающей функции:

 Printing array keys 'inside' (dumpOutputToFile) function:
Array
(
    [0] => file
    [1] => line
    [2] => function
    [3] => class
    [4] => object
    [5] => type
    [6] => args
)

Printing array keys to 'parent' (testIndex) function:
Array
(
    [0] => function
    [1] => class
    [2] => object
    [3] => type
    [4] => args
)
  

Комментарии:

1. Почему не работает debug_backtrace? Кажется, это работает для меня.

2. debug_backtrace для меня по какой-то причине не предоставляет ‘file’ или ‘class’ из вызова dumpOutputToFile() . Он предоставляет эти значения вне вызова, но из самого вызова эти значения не возвращаются debug_backtrace .

3. И просто для ясности $это класс CIUnit_TestCase, который является оберткой CodeIgniter для PHPUnit, который он использует для инкапсуляции / управления тестовым стендом. Это стандартный класс, но здесь много движущихся частей, и я знаю гораздо меньше о CodeIgniter / PHPUnit, чем о PHP

4. Можете ли вы показать дамп того, что предоставляет debug_backtrace?

5. Конечно… Я пошел дальше и добавил пример вывода в свою публикацию выше