PHPの存在判定には注意しよう。特にLaravelでbladeを書いているとき

やってしまったミス

商品に価格が設定されているなら価格を表示する、みたいなテンプレートを書くとき、以下のように書いていました。(ざっくり)

<?php

@if ($price)
  {{ $price }} 円
@endif

基本的に問題ないのですが、価格が0円の場合、これだと表示されません。

"0"(文字列の0)は真偽値に変換するとfalseだからですね。

<?php

(bool) "0"
> false

正解

仕様によりますが、価格が設定されていないならnullにしてあげて、以下のようにするのが良いと思います。

<?php

@if (!is_null($price)
  {{ $price }} 円
@endif