PHP復習メモ - 文字列と加算子

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 は楽しいですね。

[参考]
PHP: 加算子/減算子 - Manual

Google サイト内検索

Amazonアソシエイト