- ベストアンサー
PHP条件文の挙動についての質問
- PHPの条件文において、FALSEや0がif文の条件に入ると、無条件にelse文が実行される仕組みになっているのでしょうか?それに意味があるのか疑問です。
- 実際の例を示していただけると助かります。
- 特に、10-10という条件は何かおかしいように思えます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
例にあるようなリテラル値による条件分岐では意味はないでしょうね。 http://www.php.net/manual/ja/control-structures.if.php http://www.php.net/manual/ja/language.types.boolean.php#language.types.boolean.casting if文とは、どの言語でも同じですが、trueとされる値(2つめのリンクに記されている値以外)と 比較を行い、trueかfalseかで処理を分岐します。 つまり、意図的に比較を行っていない質問にあるような例では、trueと、記した式の結果を 比較することになり、その真偽によって処理が分岐します。 結果がtrueであるとifが成り立ち、falseだとelseが成り立つことから、if()は、必ずtrueとの 比較を行っています。 つまり、 true(if文が絶対比較を行う値) & true(式の結果) は true true(if文が絶対比較を行う値) & false(式の結果) は false しかありません。 逆にいうと、その式の値が変数で行われている場合、わざわざ比較する必要が ないということになります。 $a = true; // なんやかんかで$aの値のtrue/falseが変わったり変わらなかったりする制御があるとする if ($a) { echo "trueの制御"; } else { echo "falseの制御"; } と $a = true; // なんやかんかで$aの値のtrue/falseが変わったり変わらなかったりする制御があるとする if ($a == true) { echo "trueの制御"; } else { echo "falseの制御"; } は一緒。 $a = 10; $b = 10; if ($a - $b) { echo "0以外だった場合の制御"; } else { echo "0だった場合の制御"; } これと $a = 10; $b = 10; if ($a - $b != 0) { echo "0以外だった場合の制御"; } else { echo "0だった場合の制御"; } これは一緒。 戻り値がbooleanを返す場合も同様です。 if (array_key_exists("hoge", $a)) { echo "配列内のキーにhogeが存在した場合の制御"; } else { echo "配列内のキーにhogeが存在しない場合の制御"; }
その他の回答 (1)
if (式) { } elseif (式) { } while (式) { } for ( ; 式; ) { } どんな場合においてもこれらの「式」は最終的に論理値に変換されます。 FALSE → (そのまま) FALSE 0 → FALSE 10 - 10 → 0 → FALSE "A" === "B" → FALSE >> もしそうであれば条件文にする意味があるのでしょうか? if文の場合は無意味ですね。デバッグの際、一時的に「必ずこっちを実行させたい」というときに if (何か) を if (false) や if (true) にしたりすることはありますが。 switch (true) { } while (true) { } はわりと使います。前者はif文がズラーッと続くのをswitchでまとめたい、でも比較対象の変数が異なる、といったケースで用います。後者は意図的に無限ループさせるときに使います。 [備考] http://qiita.com/Hiraku/items/af2b304650272410ec29 http://www.php.net/manual/ja/language.operators.comparison.php
お礼
通常はこのような式を使う必要がないということで このような値にあるということを 頭の片隅においておこうと思います。 いつも助けていただいてありがとうございます。
お礼
例文はあくまで例文で実際に使用されることは 少ないということでなんとなく納得ができました。 本当にありがとうございました。