1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPでのスコープで少しびっくりした

Last updated at Posted at 2018-03-23

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

.php
<?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
<?php
$a = true;

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

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

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

1
2
7

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?