2024 日本 PHP 研討會

SplDoublyLinkedList::getIteratorMode

(PHP 5 >= 5.3.0, PHP 7, PHP 8)

SplDoublyLinkedList::getIteratorMode返回迭代模式

說明

public SplDoublyLinkedList::getIteratorMode(): int

參數

此函式沒有參數。

返回值

返回影響迭代的不同模式和旗標。

新增筆記

使用者貢獻的筆記 1 則筆記

gregorypatmore at gmail dot com
12 年前
我認為應該注意的是,IT_MODE_* 常數在類別內定義為

IT_MODE_LIFO => int(2)
IT_MODE_FIFO => int(0)
IT_MODE_DELETE => int(1)
IT_MODE_KEEP => int(0)

由於 FIFO 和 KEEP 旗標都定義為零,當您嘗試使用位元推演來辨別已啟用的模式時,可能會遇到歧義,考量到位元設定迭代器模式的方式(至少在 v5.3.5 中是如此,尚未測試其他版本),您可能會被誤導。

請考慮以下範例

<?php

$l
= new SPLDoublyLinkedList();
$l->setIteratorMode(SplDoublyLinkedList::IT_MODE_FIFO | SplDoublyLinkedList::IT_MODE_DELETE);

$mode = $l->getIteratorMode(); #int(1)

var_dump(($mode & SplDoublyLinkedList::IT_MODE_FIFO) == SplDoublyLinkedList::IT_MODE_FIFO); #輸出 true
var_dump(($mode & SplDoublyLinkedList::IT_MODE_LIFO) == SplDoublyLinkedList::IT_MODE_LIFO); #輸出 false
var_dump(($mode & SplDoublyLinkedList::IT_MODE_DELETE) == SplDoublyLinkedList::IT_MODE_DELETE); #輸出 true
var_dump(($mode & SplDoublyLinkedList::IT_MODE_KEEP) == SplDoublyLinkedList::IT_MODE_KEEP); #輸出 true (蛤?!)

?>

無論 getIteratorMode 告訴您什麼,據我所知,該物件的確正確地遵守了已設定的配置。

您應該這樣做(至少在他們添加更多選項之前)

基本上,您應該只檢查非零旗標 (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;
?>

希望這個例子對某些人有幫助。
To Top