かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

PHP Bool値を文字列として出力したい。

PHP製の管理画面とかでtruefalse といったBoolean値をそのまま表示させたい時

単純に文字列にキャストしても上手くいかない

<?php
(string) true;  // => "1"
(string) false; // => ""
strval( true );  // => "1"
strval( false ); // => ""

// 空文字を連結してもダメ
echo true . '';  // => "1"
echo false . ''; // => ""

(string), strval で文字列化しても上手く表示することができません。

var_export 関数を使うと true / false の文字列で表示される

<?php
var_export( true );  // => "true"
var_export( false ); // => "false"

変数にして使用したい時は、第二引数をtrue にすればOK

<?php
$boolean = true;
$val = var_export( $boolean, true );
echo $val; // => "true"

三項演算子やif文を使うパターン

簡単ですが、Boolean値以外でもtrueかfalseでされてしまう問題があるのでそれを許容できるのであればOK。

<?php
function print_boolean($val) {
  echo ($val)? 'true':'false';
}
print_boolean( true );  // => "true"
print_boolean( false ); // => "false"

// Boolean値以外でも true か false で出力される
print_boolean(  );  // => "false"
print_boolean( 0 ); // => "false"
print_boolean("false"); // => "true"

Boolean を var_dump、prent_r した時の違い

<?php
var_dump( true );  // => bool(true)
var_dump( false ); // =>  bool(false)

print_r( true );  // => "1"
print_r( false ); // => ""

 
Bool値を文字列にキャストした際にfalse""になってしまうのは、文字列の"false"をBoolean値にキャストするとtrueになる仕様のためなんじゃないかなと思いました。👇

<?php
$bool = (bool) "false";
var_dump( $bool ); // => bool(true)
$bool = (bool) 0
var_dump( $bool ); // => bool(false)

[参考]

いきなりはじめるPHP~ワクワク・ドキドキの入門教室~

いきなりはじめるPHP~ワクワク・ドキドキの入門教室~