🧠 今日の一問(PHP|初中級)
次のコードを実行したとき、echo で出力される結果は何ですか?理由も簡潔に説明してください。
<?php
$value = "0";
if ($value) {
echo "A";
} else {
echo "B";
}
解答形式
- 出力結果:
- 理由(1〜2行):
※ 推奨解答時間:3〜5分
(※ PHP特有の「真偽値判定」がポイントです)
正解
- B
解説
PHP特有の判定方法を問う問題です。
理由の整理(正確版)
$value = "0";
PHPでは 特定の値が false 扱いされます。
if {A} else {B}ではtrueの場合にA,falseの場合にBが出力されます。今回変数$valueに定義された『文字列の0』はPHPではfalse扱いになるので、出力結果はBになります。
👉false判定 →elseが実行される
false と判定される代表例
- false
- 0(数値)
- "0"(文字列)
- ""(空文字)
- [](空配列)
- null
$value = "0";
if ($value) { // "0" は false
- 型変換されるというより
- PHPの真偽値変換ルールで "0" が false 扱い
この問題で問われている理解
- PHP の 真偽値判定(truthy / falsy)
-
isset / emptyとの使い分けへの布石
面接での短文回答
PHPでは文字列の
"0"は false と評価されるため、else 側が実行されます。
補足:PHP:isset / empty
PHP の isset / empty を、違い・使い分け・事故例の順で解説します。
① 結論(まずこれだけ)
- 存在チェック →
isset - 中身が空か →
empty - 両方同時にやりたい →
isset && !empty
② isset とは?
「その変数が存在していて、null ではないか」を調べます。
未定義 or nullの場合、値が設定されていない扱いになるのでfalseになります。
isset($a);
true になる例
$a = 0;
$a = "0";
$a = "";
$a = false;
false になる例
`$a が未定義 $a = null;`
👉 値の中身は見ない
③ empty とは?
empty($a);
「中身が空っぽ扱いか」を調べます。
true になる例(重要)
$a //aが未定義状態
$a = null;
$a = false;
$a = 0;
$a = "0";
$a = "";
$a = [];
👉 かなり厳しめ
👉 "0" が empty になるのが最大の罠
④ 両者の決定的な違い
| 値 | isset | empty |
|---|---|---|
| 未定義 | false | true |
| null | false | true |
| 0 | true | true |
| "0" | true | true |
| "" | true | true |
| false | true | true |
⑤ 実務での使い分け(超重要)
フォーム送信チェック
if (isset($_POST['name'])) {
// フィールドが送られてきたか
}
未入力チェック
if (empty($_POST['name'])) {
// 未入力エラー
}
⑥ 一番安全な書き方(王道)
if (!isset($_POST['age'])) {
//nllか未定義の状態⇒そもそも送信されていない
}
if (empty($_POST['age']) && $_POST['age'] !== "0") {
//ageがemptyかつ0ではない
//本当に未入力
}
👉 "0" を 正しく入力として扱いたい場合は必須
⑦ よくある事故例(面接で話せる)
$age = "0";
if (empty($age)) {
echo "未入力";
}
//true
❌ 「0歳」が未入力扱いになる
⑧ 面接用まとめ(短文)
isset は変数の存在確認、empty は値が空かどうかを判定します。
empty は "0" も空と判定するため注意が必要です。
理解度
- PHP 初学者が必ず踏む地雷を回避できる状態
- フォーム処理・バリデーションに直結する知識