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