3
0

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.

比較演算はいかに実装すべきか - PHP

Last updated at Posted at 2017-12-21

#テーマ
例えば変数Aに1というフラグを持たせて処理を分岐させたい時、
安易に

example.php
if($A == 1){
//処理
}

として
何も考えずに通り過ぎる人もいると思います。

でもこれでは、"1"と1の判別や、
もっと言えばtrueと1の判別すらできず、
ここに潜在的なバグを忍ばせる余地を作ってしまうことになります。

筆者は、このことについて何が正解の形なのか、
正直わかりません。

が、ここで、著名な参考書の書き方を紹介して、
今後の考察に役立てたいと思います。

大重義幸『詳細!PHP7』
によれば、
if文を扱う章(P67)で、

oshige.php
if($A == 1){
//処理
}

として、==の形で実装しています。(以下==説とする)
入門本なので、
もしかすると、厳密に考えることは
置いておきという趣旨がそこにあるのかもしれないが、
確かに他のどのページをめくっても==説に立って
話が展開しています。

一方、小川雄大・柄沢聡太郎・橋口誠 共著の
『パーフェクトPHP』では、

「本書では、比較演算を行う場合には厳密な比較を行うことを強く推奨しています。……意図しないところでキャストが発生し、それによって意図しない挙動をするプログラムを書かないためにはPHPの自動キャストをしっかりと把握し、必要に応じて明示的なキャストを行うなどのクセをつけることが大切です。」と書かれ

比較演算を行うサンプルコードは全て当たり前のように===を用いています。

perfect.php
if($A === 1){
//処理
}

また、TIPSが指摘する通り
速度の観点(http://utututizu.info/?p=451)
からも===が良しとされています。

そこで、ここでは、
基本的には===の比較演算を使う立場を支持する結論とします。

参考文献:
『詳細!PHP7』大重義幸
『パーフェクトPHP』小川雄大・柄沢聡太郎・橋口誠
https://qiita.com/mamy1326/items/b79764919c839fce4367
http://utututizu.info/?p=451

3
0
0

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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?