Чтение и понимание журналов ошибок WordPress, часть 2
В прошлый раз мы прошли через следующее:
- настройка констант отладки,
- поиск файла журнала ошибок,
- понимание того, как читать файл журнала,
- понимание трассировки стека
- понимание того, как читать стек
Как бы хорошо это ни было, по-прежнему важно понимать, как записывать данные в журнал ошибок с точки зрения программирования. То есть; одно дело, если ваша работа выдает ошибки, предупреждения или уведомления.
Другое дело, если вы хотите понять, как записывать информацию в файл для исследования и отладки вручную.
В этом посте мы продолжим делать именно это, чтобы лучше понять журналы ошибок WordPress.
Понимание журналов ошибок WordPress, часть 2
Какой смысл вообще писать в журнал ошибок? Я имею в виду, это вообще часть процесса отладки?
Из предыдущего поста :
Но как насчет случая, когда мы хотим выгрузить что-то, чтобы получить представление о том, что видит WordPress или PHP? Это тоже полезно.
Когда программисты думают об отладке, многие из них думают об использовании реального отладчика (то есть части программного обеспечения), установке точек останова и пошаговом выполнении кода для наблюдения за значениями переменных во время выполнения программы.
Мы собираемся добраться до этого момента, но прежде чем сделать это, давайте посмотрим, как мы можем сами писать в журнал ошибок, чтобы получить представление о том, как выполняется наша работа.
В конце концов, одно дело, если наша работа выдает предупреждения, ошибки и уведомления. Другое дело, если есть информация, которую мы хотим видеть. И здесь в игру вступает запись в журнал ошибок.
Понимание функций PHP
Чтобы писать в журнал ошибок, важно понимать две функции PHP:
Что касается функции error_log, обратите внимание, что ее назначение:
Отправить сообщение об ошибке в определенные процедуры обработки ошибок
В большинстве случаев это настроено для записи в файл журнала для нас через конфигурацию WordPress и PHP по умолчанию. Но это еще не все, потому что нам часто нужно выводить значения переменных, массивов, объектов и т. д.
Для этого необходимо иметь возможность использовать print_r в сочетании с error_log. print_r делает следующее:
Выводит удобочитаемую информацию о переменной
И если вы прочтете руководство, то заметите, что она принимает два аргумента, второй из которых должен быть установлен в значение true, если вы хотите, чтобы результат функции выводился в файл журнала.
В частности, как указано в инструкции:
Если вы хотите захватить вывод print_r(), используйте
returnпараметр. Когда для этого параметра установлено значениеTRUE, print_r() будет возвращать информацию, а не печатать ее.
Таким образом, общая идея записи значения массива, скажем, $exampleArray, будет выглядеть примерно так :
<?php
error_log(print_r($exampleArray, true));
Но как насчет контекста WordPress?
Запись значений в журнал ошибок в WordPress
Итак, выше описаны встроенные в PHP функции, которые нам нужны, но как это выглядит в контексте разработки WordPress.
Для этого предположим, что мы реализовали версию шаблона реестра. В нашей реализации шаблона у нас также есть метод start, который мы можем вызвать после добавления всех наших объектов в реестр.
Это может выглядеть примерно так:
<?php
/**
* Starts all of the objects stored is the registry by calling
* the `start` method that's available on each of the objects.
*/
public function start()
{
foreach ($this->storage as $obj) {
$obj->start();
}
}
Теперь, что касается реализации, это просто. Но что, если мы хотим увидеть, какие объекты вызываются на каждой итерации цикла.
Идея заключается в том, что мы можем перебирать сохраненные объекты и вызывать метод для каждого из них. Это основано на идее, что у каждого из объектов есть метод, доступный для каждого из них (который может быть реализован с помощью интерфейса ).
Во-первых, возникает вопрос: зачем нам это? Из-за природы системы управления событиями WordPress, возможно, мы хотим убедиться, что каждый объект, который мы ожидаем запустить, действительно сработает.
Во-вторых, как мы можем увидеть, какие объекты вызываются? Здесь в игру вступает запись в журнал ошибок. Используя методы, которые мы описали выше, один из способов сделать это — сделать следующее :
<?php
/**
* Starts all of the objects stored is the registry by calling
* the `start` method that's available on each of the objects.
*/
public function start()
{
foreach ($this->storage as $obj) {
error_log(print_r($obj, true));
$obj->start();
}
}
Это приведет к следующему результату:
Здесь вы можете увидеть объект; это пространство имен, его значения свойств (включая то, являются ли свойства частными, защищенными, общедоступными и т. д.).
Оттуда вы можете выполнить небольшую отладку, если вывод не соответствует вашим ожиданиям, или, возможно, вы можете использовать это, чтобы убедиться, что ваш код делает то, что вы ожидаете.
Хотя это только один пример. Однако вы можете вывести значения переменной $storage еще до того, как выполните итерацию цикла. Этот выбор действительно зависит от вас и того, чего вы хотите достичь.
Использование установленных плагинов
На этом этапе мы рассмотрели основные аспекты отладки кода с помощью журналов ошибок.
Однако теперь нам нужно обратить внимание на плагины, которые обсуждались несколько постов назад. После этого мы, в конце концов, перейдем к Xdebug.
Но далее мы рассмотрим инструменты, доступные нам из самого WordPress.

