はじめに
PHP8 上級試験では、filter_var() の挙動と各フィルタの仕様を正確に理解していることが求められます。特に FILTER_VALIDATE_BOOLEAN は「特定の値のみ true、それ以外は false」となるため、意外な落とし穴があります。本記事では具体的なコード例を通して、その正しい挙動を解説します。
目次
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'→ true123→ false'Y'→ false
※ 'Y' は true にならない点が落とし穴です。
図解:FILTER_VALIDATE_BOOLEAN の判定フロー
入力値
├─ "1" / "true" / "on" / "yes" → TRUE
├─ 数値 1 → TRUE
└─ それ以外 → FALSEまとめ
| 入力値 | 出力結果 | 理由 |
|---|---|---|
"true" | bool(true) | "true" に一致 |
123 | bool(false) | "1" ではない |
"Y" | bool(false) | "yes" に一致しない |
"on" | bool(true) | "on" に一致 |
"false" | bool(false) | 真値リストに含まれない |
"abc" + FILTER_NULL_ON_FAILURE | NULL | 判定不能 |
filter_var()はフィルタで値を検証・変換する便利な関数FILTER_VALIDATE_BOOLEANは「指定の文字列または 1 の場合のみ true」'Y'のような文字列は false になる- PHP8 上級試験ではこの挙動を正確に理解することが重要
