気軽に読めるPHP入門書・PHPスクリプトが動かないときの原因と対策などを紹介します。

  1. PHPエラーの原因と対策
  2. 18 view

switch文のcaseによる条件分岐がおかしいとき

switch文で作成した条件の分岐がおかしく感じるときがあります。次の例は、「大吉」を引いたときのみ「大吉」と表示する簡単なswitch文です。

<?php
$a = 0;
switch ($a) {
    case "大吉":
        echo "入力値:{$a} 結果:大吉";
        break;
    default:
        echo "入力値:{$a} 結果:凶";
}
?>

入ってきた値は「0」ですが、実行すると、「大吉」と表示されてしまいます。

switch文の結果がおかしい

switch文の結果がおかしい

原因は、switch文のcaseの値比較が、データの型を考慮していないことです。「0」と「大吉」という型の違う値が比較されると、2つの値は同じ数値型に変換されて比較され、「大吉」は「0」だと評価されてしまうのです。

つまり、次のような型を考慮しないif文と同じ仕組みです。

<?php
$a = 0;
if (0 == "大吉") {
    echo "入力値:{$a} 結果:大吉";
}
?>
if文の条件分岐がおかしい

if文の条件分岐がおかしい

これに対処するには、case文で型まで比較する演算子「===」を使います。合わせて、switch文での比較対象を変数$aの代わりに「true」に置き換えます。これにより、「$a === “大吉”」がtrueの場合は「大吉」と表示するという条件分岐ができあがります。

<?php
$a = 0;
switch (true) {
    case $a === "大吉":
        echo "入力値:{$a} 結果:大吉";
        break;
    default:
        echo "入力値:{$a} 結果:凶";
}
?>
型まで比較するswitch文

型まで比較するswitch文

念のため確認すると、「大吉」と入力された場合は「大吉」と表示されます。

<?php
$a = "大吉";
switch (true) {
    case $a === "大吉":
        echo "入力値:{$a} 結果:大吉";
        break;
    default:
        echo "入力値:{$a} 結果:凶";
}
?>
修正したswitch文の結果

修正したswitch文の結果

PHPエラーの原因と対策の最近記事

  1. PHPの関数や変数の前にあるアットマークの意味は?

  2. 「http:// wrapper is disabled in the server co…

  3. php.iniの場所

  4. 「Warning: array_key_exists()」と表示されるとき

  5. 「Warning: A non-numeric value encountered」と表示…

関連記事

PAGE TOP