如果我宣布一个foreach循环,如内部变量:
foreach($myArray as $myData) {
$myVariable = 'x';
}
PHP是否破坏它,并且在每次迭代重新创建呢? 换句话说,这将是更明智的性能,明智的事情:
$myVariable;
foreach($myArray as $myData) {
$myVariable = 'x';
}
谢谢你提前为您的见解。
如果我宣布一个foreach循环,如内部变量:
foreach($myArray as $myData) {
$myVariable = 'x';
}
PHP是否破坏它,并且在每次迭代重新创建呢? 换句话说,这将是更明智的性能,明智的事情:
$myVariable;
foreach($myArray as $myData) {
$myVariable = 'x';
}
谢谢你提前为您的见解。
在你的第一个例子:
foreach($myArray as $myData) {
$myVariable = 'x';
}
$myVariable
在第一次迭代过程中产生的,比覆盖每个进一步的迭代。 它不会随时被摧毁离开你的脚本,功能,方法的范围之前,...
在你的第二个例子:
$myVariable;
foreach($myArray as $myData) {
$myVariable = 'x';
}
$myVariable
是任何迭代之前创建和设置为null。 在每次迭代中,如果将被覆盖。 它不会随时被摧毁离开你的脚本,功能,方法的范围之前,...
我错过提及的主要区别。 如果$myArray
是空的( count($myArray) === 0
) $myVariable
不会在你的第一个例子创建,但在你的第二个它将为NULL值。
根据我在你的第一个例子IDE(NuSphere PHPED)调试器:
foreach($myArray as $myData) {
$myVariable = 'x';
}
$myVariable
只创建一次。
根据我的实验,这是相同的:
<?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)
问题是$ MYVARIABLE是不是真正的地方才的foreach。 因此,它可以揍根据同名全局变量。
周围的一种方式是让你的foreach内联匿名函数。
如
$myforeach=function(&$myArray){ // pass by ref only if modifying it
foreach($myArray as $myData) {
$myVariable = 'x';
}
};
$myforeach($myArray); // execute anonymous.
这样,你能保证它不会在其他全局步骤。