在每个迭代中销毁并重新创建在foreach循环内声明的PHP变量吗?

Ale*_*ier 14 php variables foreach scope loops

如果我在foreach循环中声明一个变量,例如:

foreach($myArray as $myData) {
    $myVariable = 'x';
}
Run Code Online (Sandbox Code Playgroud)

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

$myVariable;
foreach($myArray as $myData) {
    $myVariable = 'x';
}
Run Code Online (Sandbox Code Playgroud)

提前感谢您的见解.

eis*_*erg 21

在你的第一个例子中:

foreach($myArray as $myData) {
    $myVariable = 'x';
}
Run Code Online (Sandbox Code Playgroud)

$myVariable在第一次迭代期间创建,而不是在每次进一步迭代时覆盖.在离开脚本,函数,方法的范围之前,它不会在任何时候被销毁......

在你的第二个例子中:

$myVariable;
foreach($myArray as $myData) {
    $myVariable = 'x';
}
Run Code Online (Sandbox Code Playgroud)

$myVariable在任何迭代之前创建并设置为null.在每次迭代期间,如果将被覆盖.在离开脚本,函数,方法的范围之前,它不会在任何时候被销毁......

更新

我错过了提到的主要区别.如果$myArray为空(count($myArray) === 0)$myVariable不会在第一个示例中创建,但在第二个示例中,它将使用null值.

  • 你的两个例子基本相同.如果在循环之前或循环中声明变量,变量将具有在最后一次迭代结束时具有的值.即使你没有在循环之前声明它,foreach循环后也不会销毁变量.这是PHP的典型特征,在大多数其他编程语言中都不会发生. (3认同)
  • @Jules这些不是我的例子,这些是问题的例子! (2认同)