PHP Iterable
PHP - 什么是 Iterable?
Iterable
是指任何可以使用 foreach()
循环遍历的值。
Iterable
伪类型在 PHP 7.1 中引入,它可以作为函数参数和函数返回值的数据类型。
PHP - 使用 Iterable
iterable
关键字可以用作函数参数的数据类型或函数的返回类型:
实例
使用 iterable
函数参数:
<?php function printIterable(iterable $myIterable) { foreach($myIterable as $item) { echo $item; } } $arr = ["a", "b", "c"]; printIterable($arr); ?>
实例
返回 iterable
:
<?php function getIterable():iterable { return ["a", "b", "c"]; } $myIterable = getIterable(); foreach($myIterable as $item) { echo $item; } ?>
PHP - 创建 Iterable
数组
所有数组都是 iterable,因此任何数组都可以用作需要 iterable 的函数的参数。
迭代器
任何实现了 Iterator 接口的对象都可以用作需要 iterable 的函数的参数。
迭代器包含一个项目列表,并提供方法来循环遍历它们。它保持一个指向列表中某个元素的指针。列表中的每个项目都应该有一个可用于查找项目的键。
迭代器必须具有这些方法:
current()
- 返回指针当前指向的元素。它可以是任何数据类型key()
返回与列表中当前元素关联的键。它只能是整数、浮点数、布尔值或字符串next()
将指针移动到列表中的下一个元素rewind()
将指针移动到列表中的第一个元素valid()
如果内部指针没有指向任何元素(例如,如果在列表末尾调用了next()
),则应返回 false。在任何其他情况下,它都返回 true
实例
实现 Iterator 接口并将其用作 iterable:
<?php // 创建一个 Iterator class MyIterator implements Iterator { private $items = []; private $pointer = 0; public function __construct($items) { // array_values() 确保键是数字 $this->items = array_values($items); } public function current() { return $this->items[$this->pointer]; } public function key() { return $this->pointer; } public function next() { $this->pointer++; } public function rewind() { $this->pointer = 0; } public function valid() { // count() 指示列表中有多少项 return $this->pointer < count($this->items); } } // 一个使用 iterable 的函数 function printIterable(iterable $myIterable) { foreach($myIterable as $item) { echo $item; } } // 将迭代器用作 iterable $iterator = new MyIterator(["a", "b", "c"]); printIterable($iterator); ?>