if条件式の中の=の数は、2つの場合と3つの場合があります。
プログラミングを学び始めたころは、
「イコールが1つと2つと3つで、何が違うの?」
って悩んだりしませんか?
結論から言うと、ifのあとは、イコール2こが良いことがほとんど!
イコール1こは間違い。イコール3こにすると、データの型まで一致する必要がでてきます。
Laravelでの例を使って、イコールの数による違いを解説していきます。
ifの中の=イコールの数は2つと3つで何が違って、どっちが正解?
たとえば、次のような構造のデータベーステーブルがあるとします。
数の部分は、Int型、つまり整数が入るよう設定してあります。
このデータベースに、次の2つのデータが入ってるとします。
「みたらし」団子の数は「1個」です。
このデータを使って、ビューファイルに「みたらし団子の数が1個なら表示される」という条件式を書いてみます。
ifの中のイコールが1このとき
まずはイコールが一つ入れて、こんなふうに式を作ってみます。
1 2 3 4 5 6 7 |
@foreach($dangos as $dango) @if($dango->number='1') みたらしは、1こあります。 @endif @endforeach |
すると、こんな結果になります。
イコールが1個のときは「代入」の意味となり、ifが機能しないのです。
単純に、団子の数だけ「みたらしは、1こあります」の文章が繰り返されます。
ifの中のイコールが2このとき
次にイコールがふたつのとき。こんなふうに式を作ってみます。
1 2 3 4 5 6 7 |
@foreach($dangos as $dango) @if($dango->number==1) みたらしは、1こあります。 @endif @endforeach |
すると、ちゃんと望んだ結果になります。
ここで、条件式の中の1をカッコで囲み、’1′ とします。
これによって、数字ではなく文字列として処理してみます。
1 2 3 4 5 6 7 |
@foreach($dangos as $dango) @if($dango->number=='1') みたらしは、1こあります。 @endif @endforeach |
データベースの値と一致していると判断し、文章が表示されました。
イコールが2この場合は、データベースの中のデータ型と違うデータ型を使っても、値が同じであれば「同じ」と判断してくれます。
ifの中のイコールが3このとき
最後に、イコールの数を3こにしてみます。
1 2 3 4 5 6 7 |
@foreach($dangos as $dango) @if($dango->number===1) みたらしは、1こあります。 @endif @endforeach |
すると、ちゃんと望んだ結果になりました。
次に条件式の中の1をカッコで囲んで文字列として扱ってみます。
1 2 3 4 5 6 7 |
@foreach($dangos as $dango) @if($dango->number==='1') みたらしは、1こあります。 @endif @endforeach |
すると、結果が表示されませんでした。
×表示されず
イコールの数を3こにすると、データの型まで同じにしないと、【同じ】と判断してくれないのです。
さいどに
データの型まで厳密に一致させたい場合には、ifの中のイコールは3こにしましょう。
そうでなければ、2こでOK。
うっかり1こにしないように注意してくださいね^^
おまけ
なお、わたしが実際に経験したことですが、データ型まで同じなのに、なぜかイコール3個にすると、本番環境でエラーになるケースがありました。
レアケースかもしれませんが…
もしイコール3個にしたときに原因不明のエラーが起こったら、イコールの数をひとつ減らしてみてください。