始めに
・会社の研修で、PHPの基礎問題を解いているときにふと思った疑問
・たとえば独学時は「もし文字列$hogeが"1"である場合は~」という条件分岐で比較演算式"=="を使い
<?php if( $hoge == 1 ){ 処理 } ?>
みたいなコードを書いていた。
・でももう一度基礎に振り替えると、比較演算子"==="もあるよねとなって学び直し。
学習したこと
"=="と"==="の違い
まずはマニュアル。これによると、
==(イコール2つ)
例:$a == $b
名前:等しい
結果:型の相互変換をした後で $a が $b に等しい時に true。
===(イコール3つ)
例:$a === $b
名前:等しい
結果:$a が $b に等しく、および同じ型である場合に true 。
2つの違いは「型まで一緒か否か」ということになる
例えば、これ。
$num1 = 1 ; $num2 = "1"; $num3 = $num1 + $num2 ; echo $num3 ; // 結果:2 var_dump($num3); // 結果:int(2)
$num1と$num2の加算式の結果$num3は2で、$num3自体もint型の状態で一見$num1と$num2は全く同じものに見えるが、
var_dump($num1 == $num2); // 結果:true var_dump($num1 === $num2); // 結果:false
となる。
PHP 8.0.0から要注意!
サーバーサイド言語をPHPしか知らない僕にとっては型の概念が非常に弱い。。。
PHPはその型の制約が非常にゆるい点で学習コストが低いこともあるが、PHP8.0.0からこの型について知っておかねばエラーが発生するようになった。
マニュアルにも「警告」が出ているが、例えば
var_dump(0 == "a");
これはPHP8.0.0以前は"false"を返していたが、8.0.0以降は"true"を返すようになってしまった等、型の概念を知っておかねば予期せぬ挙動をするようになった。
所見
今後PHP8.0.0の環境下で開発する際や、そもそも他の言語を学ぶ際には型の概念は必須なので、抑えておこうと思った。
また、マニュアルを読むと「このコードもこんな挙動をするんだ…」など、学びが多い。
例)
var_dump("10" == "1e1"); // 10 == 10 -> true
⇒なんで、"1e1"が10として処理されるのか??