PHP Conference Japan 2024

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