教文館の社内ナレッジベースです。

上のような警告が出ました。biz-vektorにお世話になっているの丸見えwww

Warning: number_format() expects parameter 1 to be double, string given in…

これは何だろう?以前はなかったのに?

調べてみるとphpのバージョンアップ(5.2→5.3)に伴うエラーのようです。はい、よくあるパターン。以前も似たような経験したorz

引用元:http://php.net/manual/ja/migration53.incompatible.php

PHP5.3の変更点

・引数を解釈する内部API が、PHP 5.3.x に同梱されている全ての拡張機能に適用されるようになりました。つまり、互換性のないパラメーターが渡された場合、 この引数を解釈するAPIは NULL を関数に返させます。

つまりですね、あらゆる関数(当然number_formatを含む)に対して互換性のない値が渡されると、NULLを関数に返すわけです。もう一度言います、関数に返されるのは0ではなくNULLです。今回、該当する部分にはカスタムフィールドの値を代入していたわけですが、エラーが出たのは空欄にしていた場合。おそらくこれが漢数字でもエラーは出るのでしょう。というかエラーになった(検証済み)。

number_format関数のパラメーターは整数型。通常は関数がinteger引数を必要とする場合、値は自動的に変換されるようですが、おそらく使用しているプラグインの挙動のせいなのでしょう(企業秘密)。細かいことはいいとして、とにかく、こういうエラーはでるのだから、へなちょこでも私の存在意義は大きいのだよ、どや!

というわけで対処。

パラメーター(値)がない場合は0と認識すればいいのだから、あらかじめ明示的に値の型を決めておけばよい。(※値に二バイト文字を使ってしまうとかいう初歩ミスはこの際ちょっと無視。変換するには別の関数をくっつけないといけないが、内部のオペレーターにそんな親切は無用でしょう。)

integer に値を明示的に変換するには、キャスト (int) または (integer) のどちらかを使用してください。

出典:http://php.net/manual/ja/language.types.integer.php

変数の前に(int)または (integer)をつけろと。これはキャスト(型変換)といい、変数や値の先頭に付けることにより、指定された型に変換するようです。

試しに

<?php echo number_format((integer)…..

とすると、フィールドが空欄、つまりNULL値でもエラー表示が消えました。

よっしゃ、解決!