FilterIterator 类

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

简介

此抽象迭代器过滤掉不需要的值。此类应该被扩展以实现自定义迭代器过滤器。FilterIterator::accept() 必须在子类中实现。

类概要

abstract class FilterIterator extends IteratorIterator {
/* 方法 */
public __construct(Iterator $iterator)
public accept(): bool
public current(): mixed
public key(): mixed
public next(): void
public rewind(): void
public valid(): bool
/* 继承的方法 */
}

目录

添加注释

用户贡献的注释 3 条注释

23
Venelin Vulkov
15 年前
以下代码是一个简单的用法示例。请注意,实际执行工作的函数是 accept。

<?php
class UserFilter extends FilterIterator
{
private
$userFilter;

public function
__construct(Iterator $iterator , $filter )
{
parent::__construct($iterator);
$this->userFilter = $filter;
}

public function
accept()
{
$user = $this->getInnerIterator()->current();
if(
strcasecmp($user['name'],$this->userFilter) == 0) {
return
false;
}
return
true;
}
}

$array = array(
array(
'name' => 'Jonathan','id' => '5'),
array(
'name' => 'Abdul' ,'id' => '22')
);

$object = new ArrayObject($array);

// 请注意,在我们的示例中,由于使用了 strcasecmp 函数,它是不区分大小写的检查
$iterator = new UserFilter($object->getIterator(),'abdul');

foreach (
$iterator as $result) {
echo
$result['name'];
}

/* 输出 Jonathan */

?>
致意。
5
匿名
10 年前
关于函数调用顺序的小测试

<?php

class TestIterator extends IteratorIterator
{
public function
key()
{
echo
__FUNCTION__, PHP_EOL;
return
parent::key();
}

public function
next()
{
echo
__FUNCTION__, PHP_EOL;
return
parent::next();
}

public function
rewind()
{
echo
__FUNCTION__, PHP_EOL;
return
parent::rewind();
}

public function
valid()
{
echo
__FUNCTION__, PHP_EOL;
return
parent::valid();
}
}

class
TestFilterIterator extends FilterIterator
{
public function
accept()
{
echo
__FUNCTION__, PHP_EOL;
return
true;
}
}

$iterator = new ArrayIterator(array('a', 'b', 'c'));

foreach (new
TestFilterIterator(new TestIterator($iterator)) as $k => $v) {
echo
PHP_EOL;
}

?>

这将输出以下内容

rewind
valid
key
accept

next
valid
key
accept

next
valid
key
accept

next
valid
0
匿名
2 年前
通过方法过滤对象集合
<?php
/**
* @method object current()
*/
class CollectionFilterIterator extends FilterIterator
{
private
$methodName;
private
$methodArguments;

public function
__construct(Iterator $collection, string $methodName, array $methodArguments = [])
{
parent::__construct($collection);
$this->methodName = $methodName;
$this->methodArguments = array_values($methodArguments);
}

public function
accept(): bool
{
return (bool)
$this->current()->{$this->methodName}(...$this->methodArguments);
// or call_user_func_array([$this->current(), $this->methodName], $this->methodArguments);
}
}
?>
To Top