記事内にはプロモーションが含まれています

【PHP】Boolean(論理型)を徹底解説!判定・変換・0や空文字の扱い

【PHP】Boolean(論理型)を徹底解説!判定・変換・0や空文字の扱い PHP

PHPプログラミングにおいて、最も基本的かつ重要な型の一つが「Boolean(論理型)」です。
条件分岐やループ処理の制御に使われるこの型は、true(真)と false(偽)のたった2つの値しか持ちません。

しかし、PHPは型に対して柔軟な言語であるため、「文字列の”0″はtrue?false?」「falseをechoで出力するとどうなる?」といった部分で、意外な挙動に悩まされる開発者が少なくありません。

この記事では、PHPのBoolean型の基本から、間違いやすい型変換(キャスト)のルール、文字列や数値との相互変換、そしてデータベース(MySQL)での扱いまでを徹底的に解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

PHPのBoolean(論理型)とは?基本ルール

Boolean(ブーリアン)は、物事の真偽を表すための最もシンプルなデータ型です。
プログラミングにおいては、「はい / いいえ」「成功 / 失敗」「ある / ない」といった二者択一の状態を表現するのによく使われます。

true と false

PHPでは、定数 truefalse を使って表現します。

これらは大文字・小文字を区別しません
つまり、TRUETruetrue はすべて同じ意味になりますが、一般的には小文字で書くことが推奨されています(PSR-12コーディング規約など)。

<?php
$is_admin = true;  // 管理者である
$has_error = false; // エラーはない

var_dump($is_admin);
var_dump($has_error);
?>

実行結果は以下の通りです。

bool(true)
bool(false)

変数がBooleanかどうかを判定する is_bool

ある変数が論理型かどうかを厳密にチェックしたい場合は、組み込み関数の is_bool() を使用します。

<?php
$flag = true;
$number = 1;

if (is_bool($flag)) {
    echo '$flag はBoolean型です。';
}

if (!is_bool($number)) {
    echo '$number はBoolean型ではありません。';
}
?>

実行結果は以下の通りです。

$flag はBoolean型です。
$number はBoolean型ではありません。

Booleanへの自動変換(キャスト)のルール

PHPの最大の特徴であり、同時にハマりやすいポイントが「自動的な型変換」です。

if 文などの条件式の中では、Boolean以外の型(数値や文字列など)も自動的に truefalse に評価されます。

どのような値が false とみなされ、それ以外が true になるのか、このルールを正確に把握しておくことが重要です。

falseとみなされる値の一覧

PHPにおいて、以下の値は boolean に変換すると false になります。

  1. 論理値の false
  2. 整数の 0
  3. 浮動小数点数の 0.0 および -0.0
  4. 空の文字列 ""、および文字列の "0"
  5. 要素を持たない空の配列 []
  6. 特別な値 null
  7. 空のタグから作成されたSimpleXMLオブジェクト

これら以外は、すべて true として扱われます。

特に注意すべき変換パターン

以下のサンプルコードで、直感と異なりやすいケースを確認しましょう。

<?php
// 文字列の "false" は true になる!
$str_false = "false";
if ($str_false) {
    echo '"false" は true です<br>';
}

// 負の数も true になる!
$negative = -1;
if ($negative) {
    echo '-1 は true です<br>';
}

// 文字列の "0" は false だが、"00" は true になる!
$str_zero_zero = "00";
if ($str_zero_zero) {
    echo '"00" は true です<br>';
}
?>

実行結果は以下の通りです。

"false" は true です
-1 は true です
"00" は true です

特に注意が必要なのは、文字列の “false” は true と評価される点です。
外部APIから文字列として “false” を受け取った場合、そのままif文に入れると true 扱いになってしまうため、注意が必要です。

Booleanへの明示的な変換(キャスト)

変数の前に (bool) または (boolean) を記述することで、強制的に論理型へ変換できます。
また、boolval() 関数を使っても同様の結果が得られます。

<?php
$val1 = 100;
$val2 = "Hello";
$val3 = 0;

$bool1 = (bool) $val1;
$bool2 = boolval($val2);
$bool3 = (bool) $val3;

var_dump($bool1); // bool(true)
var_dump($bool2); // bool(true)
var_dump($bool3); // bool(false)
?>

値の有無をチェックしてフラグ化したい場合などに便利です。

Booleanから他の型への変換(文字列・数値)

逆に、truefalse を文字列や数値として扱おうとした場合、どのように変換されるのでしょうか。
ここもバグを生みやすいポイントです。

Boolean → String(文字列)への変換

ここが最大の落とし穴です。

false を文字列に変換すると、空文字 "" になります。
「”false”」や「”0″」にはなりません。

<?php
$true_val = true;
$false_val = false;

echo "Trueの場合: " . $true_val . "<br>";
echo "Falseの場合: " . $false_val . "<br>"; // 何も表示されない
?>

実行結果は以下の通りです。

Trueの場合: 1
Falseの場合: 

true は文字列の "1" になりますが、false は空文字になるため、画面に何も表示されません。

デバッグ時に echo $result; としても何も出ない場合は、値が false である可能性が高いです。

確認には var_dump()json_encode() を使いましょう。

Boolean → Int(整数)への変換

数値を期待する計算式などでBooleanが使われた場合、以下のように変換されます。

  • true → 整数 1
  • false → 整数 0
<?php
$flag = true;
$count = 5 + $flag; // 5 + 1

echo $count; // 出力: 6
?>

厳密な比較演算子 === の重要性

Booleanを扱う際は、可能な限り「厳密な比較演算子(===)」を使用することを強くおすすめします。

「緩やかな比較(==)」では、PHPが自動的に型変換を行ってから比較するため、予期せぬ一致が起こる可能性があります。

strpos 関数の例

文字列の中に特定の文字が含まれているかを探す strpos 関数は、見つからなかった場合に false を返しますが、先頭(インデックス0)で見つかった場合は 0 を返します

<?php
$text = "Apple";
$search = "A";

// 間違いやすい書き方(== や if($pos) で判定)
$pos = strpos($text, $search);

if ($pos == false) {
    // 0 == false は true になるため、ここに入ってしまう!
    echo "見つかりませんでした(誤判定)";
}

// 正しい書き方(=== で型まで判定)
if ($pos === false) {
    echo "見つかりませんでした";
} else {
    echo "位置: " . $pos . " で見つかりました";
}
?>

0(先頭で見つかった)と false(見つからなかった)を区別するために、=== は必須です。

データベース(MySQL)とBoolean

Webアプリケーションでよく使われるMySQLには、実は「BOOLEAN型」という独立した型は内部的には存在しません。

MySQLで BOOLEAN または BOOL として定義されたカラムは、TINYINT(1) のエイリアス(別名)として扱われます。

PHPとMySQLでのやり取り

  • MySQL側: true1false0 として保存されます。
  • PHPでの取得時: データベースライブラリ(PDOなど)の設定にもよりますが、多くの場合、数値の 10、あるいは文字列の "1""0" として取得されます。

そのため、データベースから取得した値をPHPでBooleanとして扱いたい場合は、明示的なキャストや比較が必要になることがあります。

<?php
// データベースから取得した値(例)
$is_published_db = 1; // 実際にはDBから取得

// PHPで扱いやすいように変換
$is_published = (bool) $is_published_db;

if ($is_published) {
    echo "公開中";
}
?>

PHPのスキルを活かして年収を上げる方法

以上、PHPのboolean型について詳しく解説してきました。

なお、PHPのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

PHPエンジニアの需要は非常に高く求人数・案件数も多いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。

今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。

併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなPHPの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。