0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PHPで注意すべきbool値の扱い方 var_dumpとerror_logの違い

Last updated at Posted at 2024-11-21

記事の経緯

とあるデータベース処理の追跡を行っている際に、値を確認するためにerror_log()でbool値を扱ったところ、思いがけない形での出力が行われたため備忘録として。

実行環境

PHP 7.3.33

var_dump()とerror_log()の違い

デバッグ処理においてログを追跡するために、この二つをなんとなく使用していました。
「var_dump()はブラウザに出すとき、error_log()はブラウザに出せないとき用の関数」
という程度の認識だったのですが、bool値を扱うときは注意が必要でした。

$bool_true = true;
$bool_false = false;

// var_dumpでの出力
var_dump($bool_true);   // 出力: (bool) true
var_dump($bool_false);  // 出力: (bool) false

// error_logでの出力
error_log($bool_true);  // 出力: 1
error_log($bool_false); // 出力: ""
  • var_dump()はmixed型を第一引数にとります
    変数の型とその値を詳細に表示します。

  • error_log()はstring型を第一引数にとります
    PHPはtrueを1にキャストし、falseを空文字列 "" にキャストします

そのため、本来はbool値を入れることが不適切でした。

$bool_false = false;
error_log("bool_false:" . $bool_false);

// ログファイルでの出力
[Thu Nov 21 ~~] [php7:notice] [pid xxxx] [client xxx.xxx.xx.x] bool_false:, referer: http://xxx.xxx

まるで出力されていないようにも見えるので、原因の特定に手こずってしまいます。

解決策

var_export() を使おう

error_log(var_export($bool_true, true));  // 出力: true
error_log(var_export($bool_false, true)); // 出力: false
  • var_export()はmixed型を第一引数にとります
    渡された変数に関する構造化された情報を返します。

error_log()はそのままだと読み取りにくいことが多いので、var_export()やprint_r()などと併用していくことを心掛けていきましょう。

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?