PHP

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

テーマ

例えば変数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