by shigemk2

当面は技術的なことしか書かない

代入とインクリメントの謎

まずはこれを見てほしい。

<?php
$hoge1 = 1;
$hoge2 = $hoge1++;
print_r($hoge2 . PHP_EOL);      // 1
print_r($hoge1 . PHP_EOL);      // 2

最初$hoge1に1が代入されており、$hoge1をインクリメントしたものを
$hoge2に代入したから、$hoge2は2になることを期待していたのだが、
2にならなかった。

この部分ですね。

$hoge2 = $hoge1++;

ところが、あとでこの$hoge1を出力してみると2になっている。
もっと言うと、この$hoge1に+1すると、3が出力される。
こんな風に。

<?php
$hoge3 = $hoge1 + 1;
print_r($hoge3 . PHP_EOL);      // 3

横着せずに複数行に分けて処理を書いたらどうだろうか。

<?php
$hoge1 = 1;
$hoge1++;
$hoge4 = $hoge1;
print_r($hoge4 . PHP_EOL);      // 2
print_r($hoge1 . PHP_EOL);      // 2

今度はちゃんと$hoge4が2になりました。
なお、

$hoge1 = &$hoge2++;

とか書いてもParse Errorになるから気をつけるように。