Проверка состояния вашего кода PHP


Когда вы отлаживаете код 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:

Функция PHP var_dump()

Функция PHP error_log()

Функция PHP print_r()