无法从ArrayObject中删除元素

时间:2018-02-11 09:19:05

标签: php

我有一个扩展ArrayObject的简单类。它看起来像这样:

<button>

它的构造函数和class SimpleCollection extends ArrayObject { public function __construct($arr = []) { parent::__construct($arr, ArrayObject::ARRAY_AS_PROPS); } public function contains($value) { return in_array($value, $this->getArrayCopy()); } public function remove($vertex) { unset($this[$vertex]); } } 方法按预期工作。但是contains方法不起作用:

remove

最后一个命令打印$arr = new SimpleCollection(['b']); $arr->remove('b'); echo $arr->contains('b'); ,即使我试图从我的对象中删除一个元素。有什么问题,我该如何解决?

1 个答案:

答案 0 :(得分:2)

正如我在my comment中提到的那样,它会在unset()函数处抛出错误,因为未定义索引b。如果我们看一下var_dump($arr)这是有道理的:

object(SimpleCollection)#1 (1) { 
    ["storage":"ArrayObject":private] => array(1) {
        [0]=> string(1) "b" 
    }
}

当您执行$arr = new SimpleCollection(['b']);时,它没有b索引,它会使b的值为0

这也是有道理的,因为['b']

array(1) { 
    [0]=> string(1) "b"
} 

要获得所需的结果,您必须将['b']更改为['b' => 'something']之类的内容。然后remove()函数将起作用。