《PHP8上級試験対策》filter_var() と FILTER_VALIDATE_BOOLEAN の正しい挙動

  • URLをコピーしました!

はじめに

PHP8 上級試験では、filter_var() の挙動と各フィルタの仕様を正確に理解していることが求められます。特に FILTER_VALIDATE_BOOLEAN は「特定の値のみ true、それ以外は false」となるため、意外な落とし穴があります。本記事では具体的なコード例を通して、その正しい挙動を解説します。

キーワード:filter_var / FILTER_VALIDATE_BOOLEAN / boolean判定 / PHP8 / 上級試験対策

目次

filter_var() の基本構文

filter_var() は、指定したフィルタで値を検証または変換する関数です。

filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed
  • $value : 入力値
  • $filter : 適用するフィルタ
  • $options : オプション(省略可能)

FILTER_VALIDATE_BOOLEAN は論理値として解釈できるかを判定します。

FILTER_VALIDATE_BOOLEAN の判定ルール

PHPマニュアルによると、以下の値を渡したときに true が返ります👇

判定結果
"1"✅ true
1(int)✅ true
"true"✅ true
"on"✅ true
"yes"✅ true
上記以外(例:"0", "false", "off", "no", "Y", 123❌ false

※ 比較は 大文字小文字を区別しません。たとえば "TRUE""Yes"true と判定されます。

実行例:試験問題コードの結果

declare(strict_types=1);
error_reporting(-1);

$fn = function(mixed $v){
    var_dump($v);
    $r = filter_var($v, FILTER_VALIDATE_BOOLEAN);
    var_dump($r);
};

$fn('true');
$fn(123);
$fn('Y');

実行結果:

string(4) "true"
bool(true)
int(123)
bool(false)
string(1) "Y"
bool(false)
  • 'true' → true
  • 123 → false
  • 'Y' → false

'Y' は true にならない点が落とし穴です。

図解:FILTER_VALIDATE_BOOLEAN の判定フロー

入力値
 ├─ "1" / "true" / "on" / "yes" → TRUE
 ├─ 数値 1                 → TRUE
 └─ それ以外               → FALSE

まとめ

入力値出力結果理由
"true"bool(true)"true" に一致
123bool(false)"1" ではない
"Y"bool(false)"yes" に一致しない
"on"bool(true)"on" に一致
"false"bool(false)真値リストに含まれない
"abc" + FILTER_NULL_ON_FAILURENULL判定不能
  • filter_var() はフィルタで値を検証・変換する便利な関数
  • FILTER_VALIDATE_BOOLEAN は「指定の文字列または 1 の場合のみ true」
  • 'Y' のような文字列は false になる
  • PHP8 上級試験ではこの挙動を正確に理解することが重要

この記事が気に入ったら
いいねしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次