PHP8 Iterator(迭代器)接口

2023-08-21 14:55 更新

(PHP 5, PHP 7, PHP 8)

簡介

可在內(nèi)部迭代自己的外部迭代器或類的接口。

接口摘要

interface Iterator extends Traversable {
/* 方法 */
public current(): mixed
public key(): mixed
public next(): void
public rewind(): void
public valid(): bool
}

預(yù)定義迭代器

PHP 已經(jīng)提供了一些用于日常任務(wù)的迭代器。 詳細(xì)列表參見 SPL 迭代器。

示例

示例 #1 基本用法

這個(gè)例子展示了使用 foreach 時(shí),迭代器方法的調(diào)用順序。

<?php
class myIterator implements Iterator {
private $position = 0;
private $array = array(
"firstelement",
"secondelement",
"lastelement",
);

public function __construct() {
$this->position = 0;
}

public function rewind(): void {
var_dump(__METHOD__);
$this->position = 0;
}

#[\ReturnTypeWillChange]
public function current() {
var_dump(__METHOD__);
return $this->array[$this->position];
}

#[\ReturnTypeWillChange]
public function key() {
var_dump(__METHOD__);
return $this->position;
}

public function next(): void {
var_dump(__METHOD__);
++$this->position;
}

public function valid(): bool {
var_dump(__METHOD__);
return isset($this->array[$this->position]);
}
}

$it = new myIterator;

foreach($it as $key => $value) {
var_dump($key, $value);
echo "\n";
}
?>

以上示例的輸出類似于:

string(18) "myIterator::rewind"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(0)
string(12) "firstelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(1)
string(13) "secondelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(2)
string(11) "lastelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"

參見

參見 遍歷對象。

目錄

  • Iterator::current — 返回當(dāng)前元素
  • Iterator::key — 返回當(dāng)前元素的鍵
  • Iterator::next — 向前移動(dòng)到下一個(gè)元素
  • Iterator::rewind — 返回到迭代器的第一個(gè)元素
  • Iterator::valid — 檢查當(dāng)前位置是否有效


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號