LoginSignup
0
0

More than 3 years have passed since last update.

「 $i = $i++;」が使えないことを知った話

Last updated at Posted at 2020-07-30

※自分用メモです

はじまり

事の始まりは、実行すると無限ループするfor文から。
内容としては
1.要素数「4」の配列に、乱数(0~9)を利用して値を格納する。
2.格納した内容はループを利用して出力する。
の簡単なものだ。
終了条件がおかしくなっているように思うのでそこを見てみた。この1行である。
for($i=0; $i<=3; $i=$i++)

全くわからなくてTwitter上でアドバイスを求めたところ、一人の先輩からこんなアドバイスをいただいた。
$i=$i++$i++でいいよ」

なぜ

上のアドバイスと一緒に、理由も書いてくれているページを教えてもらった。
なぜ i = i++; としてはいけないか
ここを読んで自分なりに考えた結果、以下のような解釈に至った。
(注:コメントで正確な話を教えていただきました!ありがとうございます!)

(「;」といういわゆる副作用完了点という存在を知った前提で)
一度に、
1. iへの代入をしようとした
2. i+1をしようとした
つまり、「iという変数を1つの副作用完了点と副作用完了点の間で2回書き換えようとしたこと」が原因だと解釈した。
つまり、PHPに限らずある副作用完了点から、その次の副作用完了点までの間で1つの変数を複数回書き換えるような動作は認められていないために、ほかの言語でこれ(\$i=$i++)をやってもアウトだと考えた。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0