識者の方がいれば教えていただきたいのと
ほかの言語ってどうだっけ、と思ったので書くのですが、
以下の結果ってどうなると思いますか?

<?php
$a = 1;

$array_1 = [1,2,3,4,5];
foreach($array_1 as $val_1){
  $b[] = $val_1;
}
echo($a);
var_dump($b);

\$aがecho(\$a)で1を出力するのは当然ですが、
自分のイメージだと\$bはforeachの中でしか有効でない
と思っていました。
もっと言うと、\$bはforeachでループする度に無くなり
生成されを繰り返すのかと思っていました。

以下が結果です。

1array(5) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
  [3]=>
  int(4)
  [4]=>
  int(5)
}

\$bには値が入っていますね。
foreachの外で\$bを取得したいのであれば、
\$bを使用したい階層より浅い場所で宣言してあげないと
いけないんじゃないか、と思っていましたが、、
そうではないみたいです。

私のイメージ
<?php
$a = 1;

$b = []; // <==私のイメージではこれが必須でした
$array_1 = [1,2,3,4,5];
foreach($array_1 as $val_1){
  $b[] = $val_1;
}
echo($a);
var_dump($b);

ということは

<?php
$a = true;

if($a){
  $b = "bbb";
}
echo($b);

もできたりするんだろうな、と思いました。

まぁ、動くのはわかったのですが、こんなものなのでしょうか。。
わかる方がいれば教えていただきたいです。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.