PHP 小白 学习 生成器接口(部分)

最初感觉

看到官方概念,第一句,这是什么?性能大大提升,哇,生成器,这么牛逼,很高大上。

其实也真的很牛。

自己测试代码(结合官方文档和博客)

首先,看看文档当中继承了 Iterator 这个接口

示例代码:
class MyIterator implements Iterator {
    private $arr = [];

    public function __construct(Array $arr) {
        $this -> arr = $arr;
    }

    public function rewind() {
        var_dump(__METHOD__);
        reset($this -> arr);
    }

    public function current() {
        var_dump(__METHOD__);
        return current($this->arr);
    }

    public function key() {
        var_dump(__METHOD__);
        return key($this->arr);
    }

    public function next() {
        var_dump(__METHOD__);
        return next($this->arr);
    }

    public function valid() {
        var_dump(__METHOD__);
        return array_key_exists(key($this -> arr), $this->arr);
    }

}

$it = new MyIterator([
        'e' => 3,
        'q' => 1,
        't' => 23,
        '2' => 3,
    ]);

foreach($it as $key => $value) {
    echo "\n";
    var_dump($key, $value);
}
子会输出一下内容
string(18) "MyIterator::rewind"
string(17) "MyIterator::valid"
string(19) "MyIterator::current"
string(15) "MyIterator::key"

string(1) "e"
int(3)
string(16) "MyIterator::next"
string(17) "MyIterator::valid"
string(19) "MyIterator::current"
string(15) "MyIterator::key"

string(1) "q"
int(1)
string(16) "MyIterator::next"
string(17) "MyIterator::valid"
string(19) "MyIterator::current"
string(15) "MyIterator::key"

string(1) "t"
int(23)
string(16) "MyIterator::next"
string(17) "MyIterator::valid"
string(19) "MyIterator::current"
string(15) "MyIterator::key"

int(2)
int(3)
string(16) "MyIterator::next"
string(17) "MyIterator::valid"

学到了

上面的 foreach 可以写作下面的样子

for ($it -> rewind(); $it -> valid(); $it -> next()){
    $val = $it -> current();
    $key = $it -> key();
    echo $key,"\n",$val;
}

这样我就理解了。

阿杰博客
请先登录后发表评论
  • latest comments
  • 总共0条评论