このコードを完成させる前に、間違ってテストしたところ、停止しないことに気付きました。
$var = "any";
for ($i=1; $i < 2; $i++){
$var.$i = "any";
}
これが無限ループを引き起こすのはなぜですか? なぜ PHP はエラーを出さないのでしょうか?
このコードを完成させる前に、間違ってテストしたところ、停止しないことに気付きました。
$var = "any";
for ($i=1; $i < 2; $i++){
$var.$i = "any";
}
これが無限ループを引き起こすのはなぜですか? なぜ PHP はエラーを出さないのでしょうか?
簡単なテストを行いました:
echo $i;
$var.$i = "any";
var_dump($var);
結果 :
1string(3) "any"
anzstring(3) "any"
したがって、$i は "anz" に変換され、ループから抜け出すための検証に合格しません。
$var.$i = "任意"; は本当に正しくありません。何をしようとしているのかわかりませんが、塗りつぶして配列したい場合は、次のようなことを行う必要があります。
$var = array();
for ($i=1; $i < 2; $i++){
$var[] = "any";
}
文字列を文字ごとに変更したい場合:
$var = "any";
for ($i=1; $i < 2; $i++){
$var[$i] = "a"; // asign a new letter to the string at the $i position
}
$var.$i = "any";
この式は次と同等であるため、これは正しくありません。
$var.($i = "any");
$i
これは新しい値に割り当てられるため、while ループがチェックする条件は常に true になります。
PHP5.4+。
$i == 'any' の場合、$i++ の後に 'anz' の結果が得られます。$i == 'any'、代入後、それが実際に得られるべきものです。トリックは行の「$i='any'」の部分にあります。「=」は「.」よりも優先順位が低い場合でも、なぜ $i 内に「any」を入れるべきではないと思いますか?
代わりにこれを試してください:
$var = "any";
for ($i=1; $i < 2; $i++){
$i.$var = "anything";
}
そして、あなたのループは機能します。そして $var は「何でも」値を取得します。これはバグのようには見えません。誰かにとっては予想外の行動。