Я пытаюсь создать объект 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
должен прийти после того, какHS_Begin
Было бы лучше иметь общий Incident_Collection
, который допускает ограничения, установленные для владельца Person
) или подкласса Person_Incident_Collection
?
отличная связь. Благодаря! – dnagirl
Похож на приоритет Очередь - мой парень. Я думал о государственной схеме и задавался вопросом, позолота ли лилия. Рад узнать ваши мысли. – dnagirl
@dnagirl, пожалуйста. Re State Pattern Я бы основал решение о том, действительно ли владелец является фактическим состоянием (по сравнению с ссылкой или ссылкой) IncidentCollection или если это скорее SpecialCase. Если последнее, я не буду использовать государство.Не уверен, как сделать это менее размытым. Извини :) – Gordon