1
我在PHP SplObjectStorage Detach方法中发现了一个错误。在移除物体的过程中它可以正常工作,但如果物体相互移动,则会跳过下一个物体。php SplObjectStorage Detach()不起作用
例子:
$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);
}
,这让我这个结果。这不应该,因为我想删除对象(attr == 1)和对象(attr == 2)。 Detach()方法只删除第一个对象,然后跳过下一个然后循环。
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)
**对象($ O2-> ATTR = '2')也应被删除,这是因为没有在第一回路跳过。
为什么反对票.....如果我没有问题解释。你可以检查代码(代码不需要人类语言)。在代码清楚我分离两个对象,但它只能删除一个对象,应该不是... – 2014-12-02 06:33:44
嗨@hakre,你有什么想法关于这个.... – 2014-12-02 06:58:02
@Alon,PLZ帮助我摆脱这个问题....... – 2014-12-02 06:59:14