PHPコードをデバッグしているときは、特定の時点でのコードの状態を調べると役立つ場合があります。これにより、コード内で何が起きているのかを理解し、問題の原因となっている可能性のある問題を特定できます。
組み込みのPHP関数を使って、PHPコードの状態を調べるいくつかの方法を見てみましょう。
error_log()を使ってメッセージを記録する
組み込みのWordPressデバッグオプションのレッスンで説明したように、error_log()関数を使ってWordPressのdebug.logファイルにメッセージを記録できます。
これはデバッグに役立ちます。画面に表示せずに、コード内で何が起きているのかを確認できるためです。
error_log()関数はWordPress専用のものではありません。これは、サーバー上で設定されたPHPエラーログファイルにメッセージを記録するために、あらゆるPHPコードで使用できるPHP関数です。
ただし、wp-config.phpファイルでWordPress固有のデバッグオプションを有効にすると、error_log()に渡された内容はすべてWordPressのdebug.logファイルに記録されます。
error_log( $some_variable );
これにより、$some_variableの値がdebug.logファイルに記録されるため、コード内のその時点で何が含まれているのかを確認できます。
error_log()を使う利点は、画面に表示せずにファイルへメッセージを記録できることです。画面に表示すると、特に本番環境では、ユーザーに機密情報を公開してしまう危険があります。
また、画面に表示された長い出力の一覧から探すよりも、ログファイルで出力を確認するほうが速い場合もあります。
print_r()を使う
PHPコードの状態を調べる際に役立つもう1つの関数が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()で使用したい場合は、2番目のパラメーターを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ドキュメントの次のページを参照してください。