分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

PHP迭代器Iterator接口

发布时间:2023-09-06 01:27责任编辑:熊小新关键词:PHP
介绍

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

  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__ . "\r\n";        $this->writeLog($info);        $this->arr = $arr;        return $this;    }    //获取当前的值    public function current()    {        $info = date('Y-m-d H:i:s') . ' ' . __METHOD__ . ' Line :' . __LINE__ . "\r\n";        $this->writeLog($info);        return $this->arr[$this->position] ?? null;    }    //将指针移至下一位    public function next()    {        $info = date('Y-m-d H:i:s') . ' ' . __METHOD__ . ' Line :' . __LINE__ . "\r\n";        $this->writeLog($info);        return ++$this->position;    }    //返回当前的指针    public function key()    {        $info = date('Y-m-d H:i:s') . ' ' . __METHOD__ . ' Line :' . __LINE__ . "\r\n";        $this->writeLog($info);        return $this->position;    }    //重置指针    public function rewind()    {        $info = date('Y-m-d H:i:s') . ' ' . __METHOD__ . ' Line :' . __LINE__ . "\r\n";        $this->writeLog($info);        $this->position = 0;    }    //检查当前是否有效    public function valid()    {        $info = date('Y-m-d H:i:s') . ' ' . __METHOD__ . ' Line :' . __LINE__ . "\r\n";        $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} \r\n";}

打印结果:

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} \r\n";

   $arr->next();
}


PHP迭代器Iterator接口

原文地址:http://blog.51cto.com/phpme/2044921

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved