При разработке компонентов и модулей часто приходится делать отладку, а именно вывести содержимое массива. Для удобства можно подготовить несколько готовых функции:
//Функция отладки
function arDump(&$data,$defaultUserId = "1"){
global $USER;
if($USER->GetId() == $defaultUserId){
echo "<pre>".print_r($data,true)."</pre>";
}
}
//Функция Reflection API, получение всех методов, и свойств
function classDump($className,$defaultUserId = "1"){
global $USER;
if($USER->GetId() == $defaultUserId){
$reflection = new ReflectionClass($className);
$methods = $reflection->getMethods();
$props = $reflection->getProperties();
$statics = $reflection->getStaticProperties();
$arReflection["NAME"] = $className;
$arReflection["METHODS"] = $methods;
$arReflection["PROPERTIES"] = $props;
$arReflection["STATIC_PROPERTIES"] = $statics;
echo "<pre>".print_r($arReflection,true)."</pre>";
}
}
//Функция отладки в файл
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/log.txt");
function fileDump(&$arFields,$paramName = "arrName"){
AddMessage2Log($paramName.' = '.print_r($arFields, true),'');
}
Данный код необходимо добавить в файл /local/php_interface/init.php
arDump - выводит содержимое массива в форматированном виде;
fileDump - дозаписывает содержимое массива в файл log.txt в корень сайта. Вместо AddMessage2Log можно использовать аналог в новом ядре D7 - Bitrix\Main\Diag\Debug::dumpToFile и Bitrix\Main\Diag\Debug::writeToFile. Данный вариант отладки очень удобно использовать в ajax запросах.
classDump - можно использовать рефлекию, для того чтобы исследовать недокументированный класс, чтобы посмотреть, какие есть у него методы и свойства.
Вас же потом начитаются и будут делать по образу и подобию... Не делайте так!
Если вам нужно удобно в браузере просматривать содержимое любых переменных, подключите symfony/var-dumper или kint-php/kint. При необходимости напишите над ними обертку для проверки доступов битриксом, и будет вам счастье. Все эти танцы с тегом pre и print_r - вообще уже давно не актуальны.
Использовать рефлексию без кеширования для логирования (особенно если тыкать логирование везде где ни попадя) - это очень ресурсоемко.
Логировать отладочную информацию в корень DOCUMENT_ROOT - это вообще форшмак. Вы так с легкостью раскрываете параметры своего окружения, сервера (в зависимости от того, что попадает в лог)
Нужно логирование - подключите monolog/monolog и логируйте. Быстро, документировано, расширяемо, в любое хранилище и в любом удобном формате. Использовать AddMessage2Log для записи логов (и больших и маленьких) - это не лучшая идея, т.к. при большом количестве данных вы не сможете по ним нормально искать. Тем более в нормальных условиях таблица журнала событий должна чиститься автоматически, а если вы ее будете забивать дополнительными данными, она не будет успевать очищаться и ваша база будет расти. Что касается логирования средствами битрикс. Использовать битриксовые функции для логирования - это значит лишить себя ротации логов, из чего вытекает регулярный рост размера файла с логами, что может повлечь за собой падение всей системы из-за нехватки места.
Если уж говорить об отладке - то познакомьтесь с xdebug, и вообще забудете про то, что надо выводить какие-то отладочные данные в браузер.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».