我有一个扩展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');
,即使我试图从我的对象中删除一个元素。有什么问题,我该如何解决?
答案 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()
函数将起作用。