PHPの条件分岐、比較演算子、論理演算子について質問です。


if文の条件部を
$blood_type == ‘A’ or $blood_type == ‘a’



$blood_type == ‘A’ or ‘a’

と記述するとどういう解釈になるのでしょうか?

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:
  • 終了:2020/10/29 20:25:05

回答1件)

id:a-kuma3 No.1

回答回数4878ベストアンサー獲得回数2102

PHP のマニュアルでは、以下のふたつ。

$blood_type == 'A' or 'a'

演算子の優先順位を、括弧で明示すると、

( ($blood_type == 'A') or ('a') )

'a' は、論理演算式ではboolean へ変換されます。

boolean に変換する場合、次の値は FALSE とみなされます。

  • boolean の FALSE
  • integer の 0 および -0 (ゼロ)
  • float の 0.0 および -0.0 (ゼロ)
  • 空の文字列、 および文字列の "0"
  • 要素の数がゼロである 配列
  • 特別な値 NULL (値がセットされていない変数を含む)
  • 空のタグから作成された SimpleXML オブジェクト

その他の値は全て TRUE とみなされます (全ての resource および NAN を含みます)。

PHP: 論理型 (boolean) - Manual

なので、'a' は TRUE 。


php に限らず、

0 < $a < 10

なんかも、よく見かけるやつです。

  • id:outofjis
    試してみないと分からないけど、
    これだと、常に真になってしまうんじゃないかなぁ。

    たぶん、常に'a'が単独で真扱いになっちゃうので、
    $blood_type == 'A' が真か偽かの判定をした後で、
    それと'a'の論理和を取り、真になってしまう。


    正規表現を使うか、strtoupper関数で強制的に大文字にして判定するか、
    といったほうがいいんじゃないかと思う。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません