はじめに
PHPを扱い始めて1ヶ月程度の駆け出しエンジニアです。
本日の業務中に私個人の勝手な思い込みで必要以上にハマってしまいました。
反省もかねて自宅で色々と検証をしてみました。
コード検証はいつもお世話になっているpaiza.ioを使用。
number_format()とは
ざっくり説明すると
4ケタ以上の数字を3ケタ区切りの表記にフォーマットする関数です。
簡単な例
<?php
$int = 10000;
echo number_format($int);
?>
出力結果 
このように3ケタずつ区切りをつけることで
画面表示した際の見やすさを助ける役割があります。
ここ最近、経理部門が使うプログラムの改修作業をしていたので
ブラウザに出力する数値にはこのnumber_format()を使う、と頭に入れていました。
勘違いでハマる
データベースから必要な数値を取り出す際にデータ型が全部int型なのは確認しておりました。
なので、データベースから取り出した数値同士で足し引き計算などを行い、それをブラウザに出力する時には
<?php
$int1 = 10000;
$int2 = 50000;
$int_disp = $int1 + $int2;
echo number_format($int_disp);
?>
何を血迷ったのか
<?php
$int1 = 10000;
$int2 = 50000;
$int_disp = number_format($int1) + number_format($int2);
echo $int_disp;
?>
てな感じで勝手に自爆しておりました。
理由
データベースから取り出してきた値はint型なのですが
number_format()でフォーマットすることでstring型になります。
※当たり前のことです。。。
<?php
$int1 = 10000;
echo gettype($int1)."\n";
$int2 = 50000;
$int2_disp = number_format($int2);
echo gettype($int2_disp);
?>
厳密に言うと
ブラウザ上で表示はされていたのですが、計算結果の値がめちゃくちゃでした。
それを私は(計算式やデータベースに格納されるまでの流れを確認しなければ...!!)
と、見当違いの調査に時間を使い過ぎてしまいました。
恥ずかしい限りです。
変数の型に、もっと意識を向けないといけない、と痛感した1日でした。
4連休に入りますが、連休明けにロスを少しでもカバーできるようにしっかり学習しようと思います。
視野を広く持ち、落ち着いて業務できるように日々精進あるのみ。
おまけ
number_format()にかけると、string型になるので
文字列の連結として、以下の文法は適用されます。
使いどころは全くないと思うので、オマケ。
(3ケタ区切りとは)
<?php
$int1 = 10000;
$int2 = 50000;
$int_disp = number_format($int1).number_format($int2);
echo $int_disp;
?>