2.10PHP类型之可迭代(Iterable)类型

iterable 类型是联合类型 array|Traversable 的别名。

1.Traversable接口

这个接口没有任何方法,它的作用仅仅是作为所有可遍历接口的基本接口。

interface Traversable {
}

2.Iterator接口

Iterator接口是Traversable接口的子接口。

interface Iterator extends Traversable {

    /* 方法 */
    public current(): mixed
    public key(): mixed
    public next(): void
    public rewind(): void
    public valid(): bool
}

3.Iterator接口的自定义实现

<?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"

4.Generator类

PHP内置的Generator类是Iterator接口的实现。

final class Generator implements Iterator {
    
    /* 方法 */
    public current(): mixed
    public getReturn(): mixed
    public key(): mixed
    public next(): void
    public rewind(): void
    public send(mixed $value): mixed
    public throw(Throwable $exception): mixed
    public valid(): bool
    public __wakeup(): void
}

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/php/phplang/21435.html

(0)
上一篇 2021年2月9日 20:05
下一篇 2021年2月10日 20:16

相关推荐

  • 2.4PHP类型之类(Class)

    1.类声明 2.继承 一个类可以在类声明中使用 extends 关键字继承另一个类的属性、常量和方法。 一个类不支持继承多个父类,只能继承一个父类。 3.构造函数和析构函数 3.1构造函数声明 具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。 如果子类没有定义构造函数,则会…

    PHP语言教程 2021年2月4日
    09440
  • 1.8PHP语言的函数(Function)

    1.函数声明 函数在类中被称为方法(method)。 2.函数分类 2.1全局函数 名称 修饰符 全局函数 —————— 2.2成员函数 名称 修饰符 静态方法 用 static 修饰 实例方法 无 static 修饰 2.3局部函数 名称 修饰符 嵌套函数 —————— 3.参数分类 名称 修饰符 参数 ——————…

    PHP语言教程 2021年1月8日
    06370
  • 1.9PHP语言的语句(Statement)

    1.declare语句 declare 结构通过设定指令(directive)以用来控制语句块(statement)的行为。 1.1ticks指令 目前,只支持 ticks、encoding、strict_types 这三个指令。 Tick 是一个在 declare 中的语句块(state…

    PHP语言教程 2021年1月9日
    0280

发表回复

登录后才能评论