PHP の落とし穴シリーズ。
(ちなみに PHP のバージョンは 5.5.9 です)
まず、PHP には 文字列でも数値として解釈できそうであれば 頑張って計算してくれる優しさがあります。
たとえば、次の処理、、、
$a = '1yen'; $b = '3円'; $c = $a + 1; $d = $b + 2; var_dump($a); var_dump($b); var_dump($c); var_dump($d);
出力結果は、次のようになります。
string(4) "1yen" string(4) "3円" int(2) int(5)
"1yen" や "3円" の数字部分だけが計算されました。
変数を使わなくても同じです。
var_dump('1yen' + 1); var_dump('3円' + 2);
int(2) int(5)
通常、こんな使い方はしないと思いますが、 数字部分だけ解釈したんだな、とまだ納得できます。
ところが、加算子の場合は、また微妙な動きをします。
$a = '1yen'; $b = '3円'; $a++; $b++; var_dump($a); var_dump($b);
string(4) "1yeo" string(4) "3円"
なんと "1yen" の "n" がインクリメントされて "o" になりました。 "円" の方はそのままです。
13 回インクリメントすると、、、
$a = '1yen'; foreach (range(1, 13) as $i) $a++; var_dump($a);
string(4) "1yfa"
桁が上がり "1yen" の "e" まで "f" になってしまいました。
ちなみに減算子だとそのままです。
$a = '1yen'; $b = '3円'; $a--; $b--; var_dump($a); var_dump($b);
string(4) "1yen" string(4) "3円"
こういう動きをするから PHP は楽しいですね。