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