by shigemk2

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

ループ内で宣言された変数の行方

ループの中で変数を定義するしたら、
次のループのときに変数は定義されているのだろうか。
やってみた。

<?php
for ($i = 0; $i < 3; $i++) {
  if (isset($p)) {
    echo 'hoge' . "\n";
  }
  $p = $i;
  if (isset($p)) {
    echo 'hoge' . "\n";
  }
 }
?>

hoge
hoge
hoge
hoge
hoge

i = 0
while i < 3
  p defined?(a)
  a = i
  i += 1
  p defined?(a)
end

nil
"local-variable"
nil
"local-variable"
nil
"local-variable"

phpだとループ内で定義された変数は次のターンでも生きているが、
rubyだとループ内で定義された変数は次のターンにはリセットされている。

追記:突っ込みを受けましたが、別にスコープの話ではなかった。