14
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

if(true === true)って書くのやめろ

Posted at

はじめに

コーディングアンチパターンの紹介(個人的に嫌いな書き方の紹介

例1

<?php
if(true === true){
  echo('条件式はtrueでした');
} else {
  echo('条件式はfalseでした');
}

例えば上記のコードの出力結果は何になるでしょうか?
当然「条件式はtrueでした」と出力されます。
こんな条件式を書く人は恐らくいないとは思います。
では次の例はどうでしょうか

例2

<?php
$a = 'hoge';
if(isset($a) === true){
  echo('条件式はtrueでした');
} else {
  echo('条件式はfalseでした');
}

これも「条件式はtrueでした」と出力されます。
この条件式は見たことある人が結構いるのではないでしょうか?
ハッキリ言いますが僕はこの書き方が大嫌いです。
こういう条件式を書いている人は今すぐやめて以下のようにしてください。

<?php
$a = 'hoge';
if(isset($a)){
  echo('条件式はtrueでした');
} else {
  echo('条件式はfalseでした');
}

解説

http://php.net/manual/ja/function.isset.php
issetのリファレンスを見てみましょう。
返り値はboolで定義されています。
つまりbool値true/falseしか返ってこないのです。
bool値が返ってくるのが分かっているのにわざわざ=== trueで比較するのは冗長以外のなにものでもありません。

issetだけに限った話ではありません。
emptyとかis_array, is_nullなども同様ですね。
isset($a) === trueと書くのはtrue === trueと書いてるのと同義です。
今すぐやめましょう。

おまけ

ただし必ずboolが返ってくるわけではないものに関しては=== trueの記述をした方が良い場合もあります。
例えばstrpos
http://php.net/manual/ja/function.strpos.php
返り値の欄に注意書きがあるようにfalseを返す時もあるしそれ以外を返す時もあるので===演算子で判定しなければなりません。
返り値が必ずboolであるかどうか、で判断してください。

14
9
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?