2012-02-21 21 views
6

निम्न कोड में:डेटा मानचित्र के रूप में SplObjectStorage का उपयोग करके, क्या आप एक म्यूटेबल सरणी डेटा के रूप में उपयोग कर सकते हैं?

$storage = new \SplObjectStorage(); 

$fooA = new \StdClass(); 
$fooB = new \StdClass(); 

$storage[$fooA] = 1; 
$storage[$fooB] = array(); 

$storage[$fooA] = 2; 
$storage[$fooB][] = 'test'; 

मैं $storage[$fooA]1 होने की अपेक्षा करेंगे, जो यह है। मैं $storage[$fooB]array('test') होने की अपेक्षा भी करूंगा, जो यह नहीं है। यह भी एक सूचना है कि पढ़ता है, चलाता है "SplObjectStorage की अतिभारित तत्व के अप्रत्यक्ष संशोधन में कोई प्रभाव नहीं है ..."

मुझे लगता है कि यह इसलिए होता है क्योंकि SplObjectStorage में ArrayAccess के कार्यान्वयन संदर्भ द्वारा मान वापस नहीं करता है।

क्या डेटा मैप के रूप में SplObjectStorage का उपयोग करने का कोई तरीका है जहां कुंजी ऑब्जेक्ट्स और मान म्यूटेबल सरणी हैं? क्या इस तरह के काम करने के लिए कोई अन्य व्यवहार्य विकल्प हैं?

उत्तर

6

अप्रत्यक्ष संशोधन (यानी offsetGet संदर्भ लौटा रहा है) हाल की क्षमता है। the note for ArrayAccess::offsetGet देखें। ऐसा प्रतीत नहीं होता है कि SplObjectStorage इसका उपयोग करता है (अभी तक?)।

$a = $storage[$fooB]; 
$a[] = 'test'; 
$storage[$fooB] = $a; 
:

मैं आप के बजाय प्रत्यक्ष संशोधन का उपयोग करने का सुझाव