Pimple source code मैंने पाया कि यह दो अलग अलग सरणियों में वस्तुओं और उनकी आईडी भंडारण है को देखते हुए:पिंपल स्रोत कोड: ऑब्जेक्ट आईडी स्टोर क्यों करें और अलग-अलग सरणी में ऑब्जेक्ट करें?
class Container implements \ArrayAccess
{
private $values = array();
...
private $keys = array();
}
और फिर:
public function offsetSet($id, $value)
{
...
$this->values[$id] = $value;
$this->keys[$id] = true;
}
और अंत में:
public function offsetGet($id)
{
if (!isset($this->keys[$id])) {
throw new \InvalidArgumentException(sprintf('Identifier "%s" is not defined.', $id));
}
}
मैं मैंने फाल्कन स्रोत कोड here में कुछ भी देखा है।
मेरा प्रश्न है कि ऑब्जेक्ट आईडी कुंजी को अलग से स्टोर क्यों करें, क्यों न केवल if (!isset($this->values[$id]))
? क्या यह एक सरणी के भीतर खोजना तेज़ है? मैंने कुछ परीक्षण किए और ऐसा लगता है कि खोज की गति काफी समान है।
अन्य चीजों के अलावा, '$ this-> मान [$ id] 'के पास' NULL' का मान हो सकता है, और यह अभी भी पहचान करेगा कि यह मौजूद है, क्योंकि '$ this-> कुंजी [$ id]' सत्य है –
क्यों 'array_key_exists' का उपयोग नहीं करते? – cmorrissey
और फाल्कन कोड के बारे में क्या: https://github.com/phalcon/cphalcon/blob/master/phalcon/acl/adapter/memory.zep#L174-L175? –