Php 无法从ArrayObject中删除元素

Php 无法从ArrayObject中删除元素,php,Php,我有一个扩展ArrayObject的简单类。看起来是这样的: class SimpleCollection extends ArrayObject { public function __construct($arr = []) { parent::__construct($arr, ArrayObject::ARRAY_AS_PROPS); } public function contains($value) {

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

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]);     
    }
}
它的构造函数和
包含了预期的
方法工作。但是
remove
方法不起作用:

$arr = new SimpleCollection(['b']);

$arr->remove('b');

echo $arr->contains('b'); 
最后一个命令打印
true
,即使我试图从对象中删除元素。这有什么问题,我如何修复它?

正如我在文章中提到的,它在
unset()
函数中抛出一个错误,因为没有定义索引
b
。如果我们看看
var\u dump($arr)
,这是有道理的:

object(SimpleCollection)#1 (1) { 
    ["storage":"ArrayObject":private] => array(1) {
        [0]=> string(1) "b" 
    }
}
当您执行
$arr=newsimpleCollection(['b'])
它不生成
b
索引,而是生成
b
索引为
0
的值

这也是有意义的,因为
['b']

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


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

顺便说一句,如果有更好的方法来检查我的简单集合是否包含元素(不构建数组的副本),最好知道。请提供
$this->getArrayCopy()的代码
getArrayCopy
是在
ArrayObject
中实现的方法。它不是自定义方法。是否启用了错误报告?因为在执行代码时,它会在
b
unset()
处抛出一个错误(
E\u注意:键入8——未定义索引:b
),这意味着您在尝试取消设置
b
索引时没有访问实际的ArrayObject。@Tom Udding。我没有那样做。但从结果来看,这种结构不起作用。