Во-первых, я хочу создать некий массив, который позволяет добавлять только объекты определенного типа; MyObject
,
Во-вторых, я хочу, чтобы этот массив был неизменным, как массив значений объекта. я хочу добавить MyObjects
при создании, доступ к ним с помощью foreach
или используя смещения $myArray[0]
но я не хочу, чтобы элементы добавлялись, удалялись или сортировались — или сами элементы менялись.
Итак, я посмотрел вверх ArrayObject
, ArrayIterator
а также ArrayAccess
, Из того, что я могу сказать, они позволяют объекту действовать как массив. Я уверен, что это не то, что я хочу, но поскольку функциональность массива PHP на самом деле не является классом, который я могу расширить, я не уверен, какой путь выбрать.
Моя текущая реализация — просто тупой класс. Это не может быть использовано в foreach
или используя смещения массива, такие как $myArray[0]
без вызова getArray
функция первая
foreach ($myArray->getArray() as $myObjecy) {
Это лучшее, что я могу придумать, но должен быть какой-то лучший способ сделать это?
MyCustomArray
{
protected $array = [];
public __construct(array $array)
{
foreach($array as $obj) {
if (! $obj instanceof \MyObject) {
Throw new \Exception();
}
}
$this->array = $array;
}
public getArray()
{
return $this->array;
}
// Stop people dynamically adding properties
public function __set($name, $value) {
throw new \Exception();
}
}
Задача ещё не решена.
Других решений пока нет …