こんにちは、穂苅と申します。
このコラムでは、私が PHP8 技術者認定初級試験のための公式問題集(PHP8 技術者認定初級試験公式問題集)で学習した内容やポイントを取り上げて解説をしていくものです。P51~58 のChapter 6 比較演算子を学習してみました。
比較演算子の == と ===
比較演算子は2 つの値を比較する時に利用するものですが、この時に紛らわしいと感じているのが、「==」と「===」の違いです。PHP マニュアルを見ると、このように書いてあります。
$a == $b等しい 型の相互変換をした後で $a が $b に等しい時に true。
$a === $b等しい $a が $b に等しく、および同じ型である場合に true 。
定義を見ると分かりづらいので、自分なりにこのように理解しました。
$a == $b は、「等しい」という意味。2 つの「値」が等しい場合はtrue になる。
$a === $b は、「同じ」という意味。2 つの「値」と「型」が等しい場合はtrue になる。
つまり、”5″ == 5 は true を返しますが、”5″ === 5 は false を返します。”5″ と 5 はデータ型が異なるからです。この違いを理解していないと、予期せぬ動作を引き起こすことがありますので注意が必要です。
(参考)比較演算子
比較演算子の != と !==
同じく「!=」と「!==」も要注意だと思いました。PHP マニュアルを見てみると、このように書いてあります。
$a != $b等しくない 型の相互変換をした後で $a が $b に等しくない場合に true。
$a !== $b等しくない $a が $b と等しくないか、同じ型でない場合にtrue 。
こちらも、自分なりにこのように理解しました。
$a != $b は、「等しくない」という意味。2 つの「値」が等しくない場合はtrue になる。
$a !== $b は、「同じでない」という意味。2 つの「値」と「型」が等しくない場合はtrue になる。
つまり、”5″ != 5 は false を返しますが、”5″ !== 5 は true を返します。こちらも同様に、型の扱いに注意が必要です。
Webフォームで起こりがちなバグ
登録用のWeb フォームの項目に、1 行テキストで「ニックネーム」と「好きなゲーム」という項目があるとします。「好きなゲーム」の欄に例えば「0」というゲームの名前を入力して送信した場合にエラーになりました。
この原因として、以下のようなコードであったことです。
if (!$favorite_game) {
show_error(‘好きなゲームを入力して下さい。’)}
問題はどこかというと、 !$favorite_game です。これは、 $favorite_game == false と同じ意味になります。となると、 $favorite_game にはユーザーが入力した文字列の 0 が代入されている事になり、 “0” == false の判定になります。
数値文字列の “0”になるため、以下のように修正することでエラーが解消されます。
// 文字列がゼロならエラーが出る
if (strlen($favorite_game) === 0) {
show_error(‘好きなゲームを入力して下さい。’);
}
PHP8技術者認定初級試験で正しいPHPの理解を
今回は、違いを理解していないと異なる動作を引き起こす可能性がある比較演算子について学習してきました。本質を理解しておかないと使いこなすのが難しいなぁという印象です。次回以降も PHP で学習した内容をシェアしていきますので、よろしくお願いいたします。
また、PHP の学習やエンジニアになるためのマイルストーンとして、PHP 試験はおすすめです。PHP8 技術者認定初級試験はPHP を扱うあらゆる方にとって有益な試験になるはずですので、ご興味がある方はぜひチャレンジしてみてください。
試験ページ: PHP8 初級試験
公式問題集:PHP8 技術者認定初級試験公式問題集