栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

PHP迭代器Iterator接口

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

PHP迭代器Iterator接口

介绍

可在内部迭代自己的外部迭代器或类的接口。

Iterator extends Traversable
{
    
    abstract public mixed current(void)
    abstract public scalar key(void)
    abstract public void next(void)
    abstract public void rewind(void )
    abstract public boolean valid(void)
}


举个栗子,定义一个迭代器:

class myIerator implements Iterator
{
    protected $position;//指针
    public $arr = [];
 
    public function __construct(array $arr)
    {
        $info = date('Y-m-d H:i:s') . ' ' . __METHOD__ . ' Line :' . __LINE__ . "rn";
        $this->writeLog($info);
        $this->arr = $arr;
        return $this;
    }
 
    //获取当前的值
    public function current()
    {
        $info = date('Y-m-d H:i:s') . ' ' . __METHOD__ . ' Line :' . __LINE__ . "rn";
        $this->writeLog($info);
        return $this->arr[$this->position] ?? null;
    }
 
    //将指针移至下一位
    public function next()
    {
        $info = date('Y-m-d H:i:s') . ' ' . __METHOD__ . ' Line :' . __LINE__ . "rn";
        $this->writeLog($info);
        return ++$this->position;
    }
 
    //返回当前的指针
    public function key()
    {
        $info = date('Y-m-d H:i:s') . ' ' . __METHOD__ . ' Line :' . __LINE__ . "rn";
        $this->writeLog($info);
        return $this->position;
    }
 
 
    //重置指针
    public function rewind()
    {
        $info = date('Y-m-d H:i:s') . ' ' . __METHOD__ . ' Line :' . __LINE__ . "rn";
        $this->writeLog($info);
        $this->position = 0;
    }
 
    //检查当前是否有效
    public function valid()
    {
        $info = date('Y-m-d H:i:s') . ' ' . __METHOD__ . ' Line :' . __LINE__ . "rn";
        $this->writeLog($info);
        return isset($this->arr[$this->position]);
    }
 
    private function writeLog(string $info)
    {
        error_log($info, 3, './debug.log');
    }
}


$zhangsan=['one','two','three','four'];
$arr = new myIerator($zhangsan);
foreach ($arr as $k => $v) {
    echo "{$k} => {$v} rn";
}

打印结果:

0 => one
1 => two
2 => three
3 => four

查看调用日志:

2017-11-27 15:56:04 myIerator::__construct Line :16

2017-11-27 15:56:04 myIerator::rewind Line :50    重置指针
2017-11-27 15:56:04 myIerator::valid Line :58        校验是否有效
2017-11-27 15:56:04 myIerator::current Line :25    获取当前指针的值
2017-11-27 15:56:04 myIerator::key Line :41          获取当前指针位置
2017-11-27 15:56:04 myIerator::next Line :33        指针下移一位(进入下一个循环)

2017-11-27 15:56:04 myIerator::valid Line :58
2017-11-27 15:56:04 myIerator::current Line :25
2017-11-27 15:56:04 myIerator::key Line :41
2017-11-27 15:56:04 myIerator::next Line :33

2017-11-27 15:56:04 myIerator::valid Line :58
2017-11-27 15:56:04 myIerator::current Line :25
2017-11-27 15:56:04 myIerator::key Line :41
2017-11-27 15:56:04 myIerator::next Line :33

2017-11-27 15:56:04 myIerator::valid Line :58
2017-11-27 15:56:04 myIerator::current Line :25
2017-11-27 15:56:04 myIerator::key Line :41
2017-11-27 15:56:04 myIerator::next Line :33

2017-11-27 15:56:04 myIerator::valid Line :58

//遍历方式二:
$arr->rewind();
while ($arr->valid()) {
    $key = $arr->key();
    $value = $arr->current();

    echo "{$key} => {$value} rn";

    $arr->next();
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/230238.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号