SplDoublyLinkedList::getIteratorMode
(PHP 5 >= 5.3.0)
SplDoublyLinkedList::getIteratorMode — Returns the mode of iteration
Description
public int SplDoublyLinkedList::getIteratorMode
( void
)
Parameters
This function has no parameters.
Return Values
Returns the different modes and flags that affect the iteration.
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Другие базовые расширения
- Стандартная библиотека PHP (SPL)
- Структуры данных
- Функция SplDoublyLinkedList::add() - Add/insert a new value at the specified index
- Функция SplDoublyLinkedList::bottom() - Получает узел, находящийся в начале двусвязного списка
- Функция SplDoublyLinkedList::__construct() - Создает новый двусвязный список
- Функция SplDoublyLinkedList::count() - Подсчитывает количество элементов в двусвязном списке
- Функция SplDoublyLinkedList::current() - Возвращает текущий элемент массива
- Функция SplDoublyLinkedList::getIteratorMode() - Возвращает режим итерации
- Функция SplDoublyLinkedList::isEmpty() - Проверяет, является ли двусвязный список пустым
- Функция SplDoublyLinkedList::key() - Возвращает индекс текущего узла
- Функция SplDoublyLinkedList::next() - Перемещает итератор к следующему элементу
- Функция SplDoublyLinkedList::offsetExists() - Проверяет, существует ли запрашиваемый индекс
- Функция SplDoublyLinkedList::offsetGet() - Возвращает значение по указанному индексу
- Функция SplDoublyLinkedList::offsetSet() - Устанавливает значение по заданному индексу $index в $newval
- Функция SplDoublyLinkedList::offsetUnset() - Удаляет значение по указанному индексу $index
- Функция SplDoublyLinkedList::pop() - Удаляет (выталкивает) узел, находящийся в конце двусвязного списка
- Функция SplDoublyLinkedList::prev() - Перемещает итератор к предыдущему элементу
- Функция SplDoublyLinkedList::push() - Помещает элемент в конец двусвязного списка
- Функция SplDoublyLinkedList::rewind() - Возвращает итератор в начало
- Функция SplDoublyLinkedList::serialize() - Сериализует хранилище
- Функция SplDoublyLinkedList::setIteratorMode() - Устанавливает режим итерации
- Функция SplDoublyLinkedList::shift() - Удаляет узел, находящийся в начале двусвязного списка
- Функция SplDoublyLinkedList::top() - Получает узел, находящийся в конце двусвязного списка
- Функция SplDoublyLinkedList::unserialize() - Десериализует хранилище
- Функция SplDoublyLinkedList::unshift() - Вставляет элемент в начало двусвязного списка
- Функция SplDoublyLinkedList::valid() - Проверяет, содержит ли узлы двусвязный список
Коментарии
I think it should be noted that the IT_MODE_* constants are defined inside the class as:
IT_MODE_LIFO => int(2)
IT_MODE_FIFO => int(0)
IT_MODE_DELETE => int(1)
IT_MODE_KEEP => int(0)
With the FIFO and KEEP flags both defined as zero, you can run into an ambiguity when trying to discern what modes have been activated when trying to use bitwise deduction as one might be lead to believe considering the bitwise way you set the iterator mode (at least in v5.3.5, haven't tested any others).
Consider this example:
<?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); #outputs true
var_dump(($mode & SplDoublyLinkedList::IT_MODE_LIFO) == SplDoublyLinkedList::IT_MODE_LIFO); #outputs false
var_dump(($mode & SplDoublyLinkedList::IT_MODE_DELETE) == SplDoublyLinkedList::IT_MODE_DELETE); #outputs true
var_dump(($mode & SplDoublyLinkedList::IT_MODE_KEEP) == SplDoublyLinkedList::IT_MODE_KEEP); #outputs true (huh?!)
?>
Regardless of whatever the getIteratorMode tells you, the object DOES correctly honor the configuration that was set as far as I can tell.
The way you SHOULD do it (at least until they add any more options):
Basically, you should just check the non-zero flags (LIFO(2) and DELETE(1)). Since it's an either/or situation within the pairs, this should be able to help you figure out the separate mode pieces an instance has been set to.
example:
<?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;
?>
Hope this can help someone.