首先,我想创建一种只允许添加某种类型对象的数组; 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();
}
}