[PHP] PHP初心者が気を付けるべきこと1選

※ PHP初心者であってプログラミング初心者ではありません。プログラミング初心者は、基本から説明されているサイトを見てください。

PHP初心者の方に教える機会は結構いままであったのですが、何を一番気を付けないといけないかなと考えた際、自分はこれを真っ先に教えるとおもいます。

それは、PHPの真偽値を判定する際の関数や考え方です。
空の配列はtrue or false、文字列の’0’はどっちか、nullの判定はどうするのかなど。

変数の評価

trueとして判定

  • 'a’ (文字列のa)
  • '1’ (文字列の1)
  • 1 (数値の1)
  • [1] (配列に要素が存在)
  • ’00’ (文字列のゼロ2個)

falseとして判定

  • “" (空文字列)
  • 0 (整数 の 0)
  • 0.0 (浮動小数点数の 0)
  • “0" (文字列 の 0)
  • NULL
  • FALSE
  • array() (空の配列)

empty() 関数

trueとして判定

  • “" (空文字列)
  • 0 (整数 の 0)
  • 0.0 (浮動小数点数の 0)
  • “0" (文字列 の 0)
  • NULL
  • FALSE
  • array() (空の配列)
  • 変数が宣言されていない

isset() 関数

trueとして判定

※ 全パターンではありません。間違いやすいものだけ。 – " (空文字) – 0 (数値の 0)

falseとして判定

  • 変数がnull
  • 変数が宣言されていない

== と ===

PHPは型がゆるいですね。気にせずに組むとよく暗黙の変換されてます。

== で判定

  • 1 == '1’ → true
  • 1 == true → true
  • [1] == true → true

'==’を使うと暗黙の変換がおきるので上記はtrueになります。

=== で判定

  • 1 == '1’ → false
  • 1 == true → false

'===’を使うと型まで厳密に判定します。

null 判定

最後は、nullかどうかの判定 変数がnullかどうかは「is_null」関数か’===’を使います

$var = null;
if (is_null($var)) {
    echo 'null';
}
if (null === $var) {
    echo 'null';
}

※== をnull 判定に使用しない 以下はtrueとして判定されてしまいます

if (null == '') {
    echo 'え ?';
}
if (null == false) {
    echo 'えぇ ?';
}
if (null == []) {
    echo 'えぇぇ !?';
}

理由は簡単ですね。条件式の右辺・左辺とも暗黙の変換がおきており、

if (false == false)

と同じ意味になってしまうため、「true」として判定されます。

まとめ

私自身、別の言語をがっつり触った後PHPに戻ってくると、上記のような凡ミスを時々します。
まぁ、ちゃんとさぼらずユニットテスト書いていけば防げるんですけどね!