मैं वस्तुओं की एक सरणी बना रहा हूं। मुझे इस सरणी की आवश्यकता होती है जिसमें केवल एक ऑब्जेक्ट का एक बार उदाहरण होता है, जिसमें एक ही ऑब्जेक्ट के कई संदर्भों को अपवाद फेंकना चाहिए। मैं इस लक्ष्य को हासिल करने के लिए निम्न कोड का उपयोग कर रहा:परिपत्र संदर्भों के साथ वस्तुओं पर in_array
public function addField ($name, iface\Node $field)
{
// Prevent the same field being added multiple times
if (!in_array ($field, $this -> fields))
{
$this -> fields [$name] = $field;
$field -> setParent ($this);
}
else
{
throw new \InvalidArgumentException ('This field cannot be added to this group');
}
return ($this);
}
इस समस्याओं के प्रमुख जब मैं वस्तुओं है कि नोड इंटरफ़ेस को लागू कार्यान्वयन शुरू कर दिया शुरू कर दिया है, क्योंकि वे वृत्तीय संदर्भ शामिल कर सकते हैं (वे अपने बच्चे नोड्स का एक संग्रह पकड़ , प्रत्येक बच्चे के माता-पिता के संदर्भ में)। एक क्षेत्र निम्न त्रुटि में परिणाम कर सकते जोड़ने की कोशिश कर उत्पन्न किया जा रहा:
PHP Fatal error: Nesting level too deep - recursive dependency?
मुझे लगता है कि पीएचपी, बजाय सिर्फ देखने के लिए अगर वे एक ही मूल्य पकड़ वस्तु संदर्भ की तुलना संपूर्ण वस्तु सरणी पार करने की कोशिश कर रहा है और है इसलिए एक ही वस्तु को इंगित करें।
मुझे क्या करने की आवश्यकता है I_rayray केवल उस ऑब्जेक्ट संदर्भों की तुलना करें जो इसे फ़ील्ड के ऑब्जेक्ट संदर्भ के साथ संग्रहीत करता है। यह पूरे ऑब्जेक्ट पेड़ को पार करने और रिकर्सन समस्या में चलने की कोशिश कर रहा है।
क्या ऐसा करने का कोई तरीका है?
समानता जांचने की विधि को लागू करने के लिए अपने उद्देश्य पर '__equals' को ओवरराइड करने का प्रयास करें। –