14

次のように、foreach ループ内で変数を宣言するとします。

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

PHPはそれを破棄し、反復ごとに再作成しますか? 言い換えれば、パフォーマンスに関して次のことを行う方が賢明でしょうか。

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

あなたの洞察を前もってありがとう。

4

4 に答える 4

22

あなたの最初の例では:

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

$myVariable最初の反復中に作成され、以降の反復ごとに上書きされます。スクリプト、関数、メソッドなどのスコープを離れる前に、いつでも破棄されることはありません...

あなたの2番目の例では:

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

$myVariable反復の前に作成され、null に設定されます。各反復中に if は上書きされます。スクリプト、関数、メソッドなどのスコープを離れる前に、いつでも破棄されることはありません...

アップデート

主な違いについては触れませんでした。If $myArrayis empty ( count($myArray) === 0)$myVariableは最初の例では作成されませんが、2 番目の例では null の値で作成されます。

于 2012-11-29T13:27:13.217 に答える
2

最初の例の私のIDE(NuSphere PHPed)のデバッガによると:

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

$myVariable一度だけ作成されます。

于 2012-11-29T13:28:49.327 に答える
2

私の実験によると、それは同じです:

<?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)

于 2012-11-29T13:32:07.203 に答える