#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. Конечно… Я пошел дальше и добавил пример вывода в свою публикацию выше