儘管 FIFO/LIFO 和 KEEP/DELETE 選項對之間看似無關,但就 setIteratorMode 的行為而言,它們在某種程度上是相關聯的。這意味著,即使之前的設定來自另一個選項對,第二次呼叫 setIteratorMode 也會清除之前的設定。結合物件的預設設定 (SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_KEEP),這表示您必須小心,否則可能會遇到問題。
請參考以下範例
<?php
$l = new SPLDoublyLinkedList();
$l->setIteratorMode(SplDoublyLinkedList::IT_MODE_DELETE);
$l->setIteratorMode(SplDoublyLinkedList::IT_MODE_LIFO);
$mode = $l->getIteratorMode();
var_dump("MODE: $mode");
var_dump("MODE CHECKS");
var_dump(($mode & SplDoublyLinkedList::IT_MODE_LIFO) == SplDoublyLinkedList::IT_MODE_LIFO);
var_dump(($mode & SplDoublyLinkedList::IT_MODE_FIFO) == SplDoublyLinkedList::IT_MODE_FIFO);
var_dump(($mode & SplDoublyLinkedList::IT_MODE_DELETE) == SplDoublyLinkedList::IT_MODE_DELETE);
var_dump(($mode & SplDoublyLinkedList::IT_MODE_KEEP) == SplDoublyLinkedList::IT_MODE_KEEP);
$l->push('A');
$l->push('B');
$l->push('C');
$l->push('D');
$l->rewind();
var_dump("Traversing");
var_dump($l->isEmpty());
var_dump($l->count());
var_dump($l->current());
$l->next();
var_dump($l->count());
var_dump($l->current());
$l->next();
var_dump($l->count());
var_dump($l->current());
$l->next();
var_dump($l->count());
var_dump($l->current());
$l->next();
var_dump($l->count());
var_dump($l->isEmpty());
?>
其輸出如下
#############################
string(7) "MODE: 2"
string(11) "MODE CHECKS"
bool(true) #LIFO (ok)
bool(true) #FIFO (嗯...等等)
bool(false)#DELETE (糟糕...怎麼回事)
bool(true) #KEEP (好吧,攝影機藏在哪裡)
string(10) "Traversing"
bool(false)
int(4)
string(1) "D"
int(4)
string(1) "C"
int(4)
string(1) "B"
int(4)
string(1) "A"
int(4)
bool(false)
#############################
基本上,您應該只檢查非零旗標 (LIFO(2) 和 DELETE(1))。由於在選項對中是二擇一的情況,這應該可以幫助您找出已設定給實例的個別模式部分。
範例
<?php
$l = new SPLDoublyLinkedList();
$l->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_DELETE);
$mode = $l->getIteratorMode();
$isLIFO = ($mode & SplDoublyLinkedList::IT_MODE_LIFO) == SplDoublyLinkedList::IT_MODE_LIFO;
$isDELETE = ($mode & SplDoublyLinkedList::IT_MODE_DELETE) == SplDoublyLinkedList::IT_MODE_DELETE;
?>
希望這對某些人有所幫助。