Иногда бывает полезно узнать последовательность вызовов функций (методов) во время исполнения какого-либо скрипта.
Простейший способ сделать это, который мне попался под руку – это воспользоваться встроенным функционалом популярного бесплатного отладчика PHP – XDebug.
Для примера рассмотрим последовательность вызовов методов ядра Joomla реализующих такую простую вещь как вывод на экран страницы со статьей.
Подробная документация по выводу последовательности вывода вызовов с помощью XDebug расположена на официальном сайте отладчика по адресу .
Воспользуемся двумя функциями для вывода колл-стека: xdebug_get_function_stack() (возвращает массив стека вызовов до этого пункта) и xdebug_print_function_stack() (показывает текущий стек вызова функций, подобным внешне способу показа XDebug ошибочных ситуаций).
Так как конечной точкой в процессе формирования статьи является шаблон вида вывода вставим функции в него C:\webserver\www\joomla\templates\joomla\html\com_content\article\default.php, например, перед выводом основного текста статьи:
<div class="article-content"> // ... <?php if (isset ($this->article->toc)) : ?> <?php echo $this->article->toc; ?> <?php endif; ?> <?php xdebug_print_function_stack( '' ); ?> <!--<?php var_dump(xdebug_get_function_stack()); ?>--> <?php echo $this->article->text; ?> // ... </div>
В результате работы функции xdebug_print_function_stack() мы увидим следующую таблицу:
( ! ) Xdebug: user triggered in C:\webserver\www\joomla\templates\joomla\html\com_content\article\default.php on line 132
Call Stack
#
Time
Memory
Function
Location
1
0.0022
88824
{main}( )
..\index.php:0
2
0.5346
5736336
JSite->dispatch( )
..\index.php:68
3
0.5671
5969256
JComponentHelper->renderComponent( )
..\application.php:124
4
0.5841
6070064
require_once( 'C:\webserver\www\joomla\components\com_content\content.php' )
..\helper.php:162
5
0.5994
6441928
JController->execute( )
..\content.php:35
6
0.5994
6442632
ContentController->display( )
..\controller.php:236
7
0.6117
6733256
JController->display( )
..\controller.php:49
8
0.6499
7224624
JCacheView->get( )
..\controller.php:312
9
0.6504
7268904
ContentViewArticle->display( )
..\view.php:98
10
1.0164
9752408
JView->display( )
..\view.html.php:196
11
1.0164
9752408
JView->loadTemplate( )
..\view.php:195
12
1.0222
9901592
include( 'C:\webserver\www\joomla\templates\joomla\html\com_content\article\default.php' )
..\view.php:567
13
1.0326
9930440
( )..\default.php:132
Которая описывает последовательность вызова функций и методов Joomla от корневого файла index.php до конечного default.php задействованных в выводе статьи.
Если воспользоваться функцией xdebug_get_function_stack() можно также заметить название объекта ContentViewArticle (ContentViewArticle object) (котрый по сути и является объектом данных статьи. Данные именно этого объекта используются в шаблоне например для вывода дат: <?php echo JHTML::_('date', $this->article->created, JText::_('DATE_FORMAT_LC3')); ?>) и предположить последовательность его создания:
- ..\components\com_content\controller.php: parent::display(true);
- ..\libraries\joomla\application\component\controller.php: $view = & $this->getView( $viewName, $viewType, '', array( 'base_path'=>$this->_basePath));
- ..\libraries\joomla\application\component\controller.php: $view = & $this->_createView( $name, $prefix, $type, $config )
- ..\libraries\joomla\application\component\controller.php: $result = new $viewClass($config);
Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">