Когда вы отлаживаете код PHP, бывает полезно изучить состояние кода в определённый момент времени. Это поможет вам понять, что происходит в коде, и выявить проблемы, которые могут вызывать ошибки.
Давайте рассмотрим несколько способов изучить состояние кода PHP с помощью встроенных функций PHP.
Использование error_log() для записи сообщений
Как обсуждалось в уроке о встроенных параметрах отладки WordPress, вы можете использовать функцию error_log() для записи сообщений в файл WordPress debug.log.
Это может быть полезно для отладки, поскольку позволяет увидеть, что происходит в коде, не выводя информацию на экран.
Функция error_log() не является специфичной для WordPress — это функция PHP, которую можно использовать в любом коде PHP для записи сообщений в файл журнала ошибок PHP, настроенный на сервере.
Однако после включения специфичных для WordPress параметров отладки в файле wp-config.php всё, что передаётся в error_log(), будет записываться в файл WordPress debug.log.
error_log( $some_variable );
Это запишет значение $some_variable в файл debug.log, чтобы вы могли увидеть, что содержит эта переменная в данный момент выполнения кода.
Преимущество использования error_log() заключается в том, что эта функция позволяет записывать сообщения в файл, не выводя их на экран. Если выводить их на экран, особенно в рабочей среде, существует риск раскрыть пользователям конфиденциальную информацию.
Кроме того, иногда быстрее посмотреть результат в файле журнала, чем искать его в длинном списке данных, выведенных на экран.
Использование print_r()
Ещё одной полезной функцией для изучения состояния кода PHP является print_r(). Эта функция выводит значение переменной, массива или объекта в удобочитаемом формате, чтобы вы могли увидеть, что он содержит.
Рассмотрим этот пример кода PHP.
$some_array = array( 'apple', 'banana', 'cherry' );
print_r( $some_array );
Этот код выведет на экран следующее:
Array ( [0] => apple [1] => banana [2] => cherry )
Разработчики часто оборачивают print_r() в теги <pre>, чтобы результат было проще читать.
echo '<pre>';
print_r( $some_array );
echo '</pre>';
Этот код выведет на экран следующее:
Array
(
[0] => apple
[1] => banana
[2] => cherry
)
Обратите внимание, что по умолчанию print_r() выводит значение переменной, но не возвращает его. Если вы хотите использовать результат print_r() вместе с error_log(), необходимо установить второй параметр в значение true.
error_log( print_r( $some_array, true ) );
Это запишет результат вызова print_r в файл debug.log, чтобы вы могли увидеть, что содержит $some_array в данный момент выполнения кода.
Использование var_dump()
Функция var_dump() — ещё одна полезная функция для изучения состояния кода PHP. Она выводит значение переменной, массива или объекта в удобочитаемом формате, а также дополнительную информацию о типе и длине переменной.
Рассмотрим этот пример кода PHP.
$some_array = array( 'apple', 'banana', 'cherry' );
echo '<pre>';
var_dump( $some_array );
echo '</pre>';
Этот код выведет на экран следующее:
array(3) {
[0]=>
string(5) "apple"
[1]=>
string(6) "banana"
[2]=>
string(6) "cherry"
}
Обратите внимание, что var_dump() выводит значение переменной, а также дополнительную информацию о её типе и длине. Это может быть полезно для отладки, поскольку предоставляет более подробную информацию о переменной, чем print_r().
В отличие от print_r(), функция var_dump() не имеет параметра для возврата результата в переменную, поэтому её нельзя напрямую использовать с error_log().
Однако можно использовать так называемую буферизацию вывода, чтобы перехватить результат var_dump(), а затем записать его в файл debug.log.
$some_array = array( 'apple', 'banana', 'cherry' );
ob_start();
var_dump( $some_array );
$output = ob_get_clean();
error_log( $output );
Разработчики часто используют такой код в специальной функции журналирования, чтобы иметь возможность применять var_dump и error_log вместе.
function log_var_dump( $variable ) {
ob_start();
var_dump( $variable );
$output = ob_get_clean();
error_log( $output );
}
Дополнительные материалы
Для получения дополнительной информации о функциях, упомянутых в этом уроке, ознакомьтесь со следующими страницами документации PHP: