मैं एक PHP ऑब्जेक्ट को डिजाइन करने की कोशिश कर रहा हूं (इसे Incident_Collection
पर कॉल करें) जिसमें अन्य ऑब्जेक्ट्स का संग्रह होगा जिसमें से प्रत्येक Incident
इंटरफ़ेस को कार्यान्वित करेगा।दिनांकित वस्तुओं के संग्रह के लिए डेटास्ट्रक्चर चुनना
<?php
class Foo implements Incident {
protected $incident_date; //DateTime object
protected $prop1;
protected $prop2;
//etc
public function when(){ //required by Incident interface
return $this->incident_date;
}
}
?>
पहले तो मुझे मैं सिर्फ बनाने चाहते हैं मेरी Incident_Collection
लागू IteratorAggregate
और संग्रह की एक सरणी संपत्ति में हादसा वस्तुओं की दुकान लगा:
<?php
class Incident_Collection implements IteratorAggregate {
protected $collection=array();
public function getIterator(){
return new ArrayIterator($this->collection);
}
public function sort(){
//sort by $incident->when() values in $this->collection
}
/*also __get($var), __set($var,$value), add(Incident $object), remove(Incident $object) and other functions*/
}
?>
लेकिन क्योंकि Incident
वस्तुओं एक प्राकृतिक व्यवस्था है, मैं शायद SPL Data Structures में से एक को विस्तारित करना अधिक उचित/कुशल हो सकता है। लेकिन कौन सा? मैं किसी विशेष डेटा संरचना का उपयोग करने के बारे में बहुत स्पष्ट नहीं हूं।
एक और शिकन वहाँ एक Incident_Collection
पर प्रतिबंध हो सकता है। उदाहरण के लिए, अगर वहाँ एक Person
वस्तु है जो एक Incident_Collection
, थे शायद निम्न प्रतिबंध लागू हो सकता है:
- केवल 1
Birth
घटना - अगर
Birth
मौजूद है, यह संग्रह में जल्द से जल्द घटना होना चाहिए - केवल 1
Death
घटना - अगर
Death
मौजूद है, यह संग्रह में पिछले घटना HS_Graduation
के बाद आना चाहिए होना चाहिए
क्या सामान्य Incident_Collection
होना बेहतर होगा जो इसके मालिक से प्रतिबंधों का एक सेट स्वीकार करता है (उदा। Person
), या एक उपclassed Person_Incident_Collection
?
उत्कृष्ट लिंक। धन्यवाद! – dnagirl
ऐसा लगता है कि प्राथमिकता कतार मेरा लड़का है। मैं राज्य के पैटर्न के बारे में सोच रहा हूं और सोच रहा हूं कि क्या यह लिली को गिल्ड कर रहा था। अपने विचारों को जानकर खुशी हुई। – dnagirl
@dnagirl आपका स्वागत है। राज्य पैटर्न मैं इस निर्णय का आधार रखूंगा कि क्या मालिक वास्तव में एक वास्तविक स्थिति (बनाम केवल एक संदर्भ/लिंक) है, इंकेंटिलेक्शन का चयन करें या यदि यह एक विशेष कारण है। यदि उत्तरार्द्ध, मैं राज्य का उपयोग नहीं करता।यह सुनिश्चित नहीं है कि इसे कम अस्पष्ट कैसे रखा जाए। माफ़ कीजिये :) – Gordon