包含特定类型对象的不可变自定义PHP数组

时间:2017-03-28 11:00:02

标签: php arrays immutability value-objects

首先,我想创建一种只允许添加某种类型对象的数组; MyObject

其次,我希望这个数组是不可变的,就像值对象数组一样。我想在创建时添加MyObjects,使用foreach或使用抵消$myArray[0]访问它们,但我不想添加,删除或排序项目,或者项目本身已更改。

所以我查了ArrayObjectArrayIteratorArrayAccess。据我所知,这些允许对象充当数组。我非常确定这不是我想要的,但由于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();
    }
}

0 个答案:

没有答案