ファンキーなタイトルで申し訳ありません。タイトルを思い付くのに苦労しました。まず、コードを分解した後、問題を実際に解決することができましたが、なぜ解決策が機能したのかわかりません。これを学習体験として扱おうとしています。
データベースから情報を収集するクラスがあります。このクラスはインデックス値を追跡して、呼び出し元の関数が一度に 1 つずつ結果を取得できるようにします。したがって、私のクラスコードにはもともと含まれていました...
protected $index = NULL;
protected $array = array(stuff);
public function next_item()
{
if($this->index == NULL)
{//first time called
$this->index = 0;
}
else
{
$this->index++;
}
if($this->index < sizeof($this->array))
{
return TRUE;
}
return FALSE;
}
public function get_result()
{
return $this->array[$this->index];
}
そして、呼び出し関数には次のようなものがあります
while($myclass->next_item()){
echo $myclass->get_result();
}
もちろん、これはこれよりもはるかに複雑ですが、これが問題のコードです (そして、あなたはアイデアを得るでしょう)。このコードは、私のプロジェクトで無限ループ (またはループの出現) を引き起こしました。$index を -1 に初期化し、null の条件付きチェックを削除することで問題を解決しました。だから今...
protected $index = -1;
public function next_item()
{
$this->index++;
if($this->index < sizeof($this->array))
{
return TRUE;
}
return FALSE;
}
私の質問は、なぜそれが機能したのですか? インデックスがNULLである間、配列で参照されることはありませんでした。確認しました。常に NULL の条件チェックが呼び出され、0 への代入が発生した後でした。
どうぞよろしくお願いいたします。これを学習体験に変えようとしているだけで、それが機能しただけでなく、なぜ機能したかを理解した方がよい.
この質問が別の場所で回答されている場合は申し訳ありませんが、質問にラベルを付ける方法がわかりませんでした (ご覧のとおり)。
乾杯 -デビッド