私は非常に複雑なPHPアプリケーションを持っていますが、XDebugは、PHPを理解できなくなった時点まで問題を追跡するのに役立ちました。私は、うまくいけば関連性のある問題の核心について詳しく説明しようとしています。
クラス階層ModelCore->Model->LMC->MCがあります。LMCには、次のコード行を持つinsert()メソッドがあります。
if($this->createEntry($mKey)) return $this->getEntry($mKey);
このgetEntry
メソッドはLMCでも定義されています。
function getEntry($mKey){
if(array_key_exists($mKey, $this->aItemList) || $this->createEntry($mKey)) return $this->aItemList[$mKey];
return false;
}
createEntry
LMCで抽象的であり、MCで定義されています。
function createEntry($mKey){
if(array_key_exists($mKey, $this->aItemList) && ($this->aItemList[$mKey] instanceof LCI))
return false;
$this->aItemList[$mKey] = new $this->sItemClass($this,$mKey,(!array_key_exists($mKey,$this->aData))? LCI::Appended : LCI::Unread);
return ($this->aItemList[$mKey] instanceof LCI);
}
LCIは、上記のツリーとは関係のない別のクラスです。sItemClass
LCIの適切なサブクラスです。では、何が起こっているのでしょうか。
createEntry
タイプLCIの同じキーのエントリがすでにあるfalse
場合は、を返すことになっています。$this->aItemList
それ以外の場合は、そのようなエントリを作成します。示されている最初の行を考慮するgetEntry
と、そのようなエントリが作成され、適切なタイプである場合にのみ呼び出されます。ただし、その中の条件はエントリを検出せず、エントリを新たに作成できます。これにより、もちろん、配列に2番目のエントリが作成されることはありません。
テストで使用されるキー値は、16
を介して生成されfloatval
ます。
そこで何が起こっているのか考えはありますか?