php SplObjectStorage Detach()不工作
我在PHP SplObjectStorage分离方法中发现了一个错误。在移除一个对象时效果很好,但如果该对象彼此出现,则会跳过下一个对象 例如:php SplObjectStorage Detach()不工作,php,object,storage,Php,Object,Storage,我在PHP SplObjectStorage分离方法中发现了一个错误。在移除一个对象时效果很好,但如果该对象彼此出现,则会跳过下一个对象 例如: $s = new SplObjectStorage(); $o1 = new StdClass; $o2 = new StdClass; $o3 = new StdClass; $o1->attr = '1'; $o2->attr = '2'; $o3->attr = '3'; $s->attach($o1); $s-&g
$s = new SplObjectStorage();
$o1 = new StdClass;
$o2 = new StdClass;
$o3 = new StdClass;
$o1->attr = '1';
$o2->attr = '2';
$o3->attr = '3';
$s->attach($o1);
$s->attach($o2);
$s->attach($o3);
echo 'Removing Objects...<pre>';
var_dump($s->count());
foreach ($s as $obj) {
var_dump($obj->attr);
if($obj->attr == 2 || $obj->attr == 1) {
echo "Deleting...".$obj->attr;
$s->detach($obj);
}
}
echo 'Checking Objects....';
var_dump($s->count());
foreach ($s as $obj) {
var_dump($obj->attr);
}
**对象($o2->attr='2')也应该被删除,这不是因为在第一个循环中跳过。我在SplObjectStorage Detach()方法中发现了一个错误,它是: 从存储器中分离当前条目将阻止SplObjectStorage::next()操作 因此,通过在执行Detach()时阻止下一个对象,迭代将永远不会到达第二个(下一个)stdClass对象。SplObjectStorage::next()显然依赖于当前元素的有效性 为了避免SplObjectStorage类中的此错误,我们需要调用next() 在调用detach()之前
希望这能帮助其他用户不要面对这个问题,也不要浪费时间……为什么投反对票。。。。。如果我没有解释的话。您可以检查代码(代码不需要人类语言)。代码中很清楚,我分离了两个对象,但它只移除了一个不应该是的对象…嗨@hakre,你对此有什么想法吗…@Alon,请帮我解决这个问题。。。。。。。
Removing Objects...
int 3
string '1' (length=1)
Deleting...1
string '3' (length=1)
Checking Objects....
int 2
string '2' (length=1)
string '3' (length=1)