是PHP变量声明里面foreach循环破坏,在每次迭代重新创建?(Are PHP variables

2019-07-04 06:46发布

如果我宣布一个foreach循环,如内部变量:

foreach($myArray as $myData) {
    $myVariable = 'x';
}

PHP是否破坏它,并且在每次迭代重新创建呢? 换句话说,这将是更明智的性能,明智的事情:

$myVariable;
foreach($myArray as $myData) {
    $myVariable = 'x';
}

谢谢你提前为您的见解。

Answer 1:

在你的第一个例子:

foreach($myArray as $myData) {
    $myVariable = 'x';
}

$myVariable在第一次迭代过程中产生的,比覆盖每个进一步的迭代。 它不会随时被摧毁离开你的脚本,功能,方法的范围之前,...

在你的第二个例子:

$myVariable;
foreach($myArray as $myData) {
    $myVariable = 'x';
}

$myVariable是任何迭代之前创建和设置为null。 在每次迭代中,如果将被覆盖。 它不会随时被摧毁离开你的脚本,功能,方法的范围之前,...

更新

我错过提及的主要区别。 如果$myArray是空的( count($myArray) === 0$myVariable 不会在你的第一个例子创建,但在你的第二个它将为NULL值。



Answer 2:

根据我在你的第一个例子IDE(NuSphere PHPED)调试器:

foreach($myArray as $myData) {
    $myVariable = 'x';
}

$myVariable只创建一次。



Answer 3:

根据我的实验,这是相同的:

<?php
for($i = 0; $i < 3; $i++) {
    $myVariable = $i;
}
var_dump($myVariable);

打印:INT(2)

<?php
$myVariable;
for($i = 0; $i < 3; $i++) {
    $myVariable = $i;
}
var_dump($myVariable);

打印:INT(2)



Answer 4:

问题是$ MYVARIABLE是不是真正的地方才的foreach。 因此,它可以揍根据同名全局变量。

周围的一种方式是让你的foreach内联匿名函数。

$myforeach=function(&$myArray){ // pass by ref only if modifying it
  foreach($myArray as $myData) {
    $myVariable = 'x';
  }
};
$myforeach($myArray);  // execute anonymous.

这样,你能保证它不会在其他全局步骤。



文章来源: Are PHP variables declared inside a foreach loop destroyed and re-created at each iteration?