PHP迭代器Iterator接口

简介:

介绍

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

1
2
3
4
5
6
7
8
9
10
   
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)
}


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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' );
     }
}


1
2
3
4
5
$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();
}










本文转自 hgditren 51CTO博客,原文链接:http://blog.51cto.com/phpme/2044921,如需转载请自行联系原作者
目录
相关文章
|
PHP 数据库
【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
【YashanDB知识库】PHP使用OCI接口使用数据库绑定参数功能异常
|
Java PHP 数据安全/隐私保护
PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
本文详细介绍了PHP面向对象编程的一系列核心概念和用法,包括构造函数、析构函数、继承、方法重写、访问控制、接口、抽象类、静态成员、final关键字、以及this、self、parent这三个关键字的异同和作用。通过具体示例代码,展示了如何在PHP中使用这些面向对象的特性,以及它们在实际开发中的应用。
PHP 面向对象,构造函数,析构函数,继承,方法的重写,接口抽象类,static,final,this,parent,self的异同和作用
|
Java API PHP
【亲测有效,官方提供】php版本企查查api接口请求示例代码,php请求企查查api接口,thinkphp请求企查查api接口
【亲测有效,官方提供】php版本企查查api接口请求示例代码,php请求企查查api接口,thinkphp请求企查查api接口
705 1
|
JSON 安全 API
实战指南:使用PHP构建高性能API接口服务端
构建RESTful API的简要指南:使用PHP和Laravel,先安装Laravel并配置数据库,接着在`api.php`中定义资源路由,创建`PostController`处理CRUD操作,定义`Post`模型与数据库交互。使用Postman测试API功能,如创建文章。别忘了关注安全性、错误处理和性能优化。
625 2
|
网络协议 API PHP
PhalApi:在宝塔一键安装部署PHP开源接口框架的教程
要在宝塔面板上一键安装部署PhalApi开源接口框架,首先进入宝塔软件商店,切换到“一键部署”选项,搜索“phalapi”并点击“一键部署”。安装时需填写接口域名、数据库名及密码,提交后等待安装完成。安装成功后可在宝塔面板中查看新站点和源代码目录,并通过DNS解析设置访问接口域名,如`http://myapi.phalapi.net/`。默认开启的调试模式便于测试,可通过修改`config/sys.php`中的`debug`值为`false`关闭。最后,在源代码中开发自己的PHP接口,PhalApi会自动生成在线接口文档,方便后续调用与维护。更多详细教程可参考官方文档。
|
PHP 数据安全/隐私保护
【PHP开发专栏】PHP接口与抽象类的应用
【4月更文挑战第30天】本文探讨了PHP中接口与抽象类的使用,包括定义、实现和比较。接口用于规定实现类必须提供的方法签名,而抽象类则可以包含方法实现和抽象方法。一个类可实现多个接口,但只能继承一个抽象类。根据需求,若需定义不相关类的共同方法,选择接口;若需提供共享属性和非抽象方法,选择抽象类。通过实战应用示例,展示了如何在动物园管理系统中结合接口和抽象类进行设计。理解两者有助于提升代码的复用性和可维护性。
163 2
|
PHP
PHP 接口和继承的异同?
【7月更文挑战第2天】PHP 接口和继承的异同?
219 0
|
PHP
PHP中接口如何定义?
【7月更文挑战第2天】PHP中接口如何定义?
146 0
|
前端开发 PHP 数据格式
【附带效果视频】php接口给前端返回流式数据,php使用event-stream进行数据推送,循环一次输出一次
【附带效果视频】php接口给前端返回流式数据,php使用event-stream进行数据推送,循环一次输出一次
694 0
|
监控 PHP Python
1688快速获取整店铺列表 采集接口php Python
在电子商务的浪潮中,1688平台作为中国领先的批发交易平台,为广大商家提供了一个展示和销售商品的广阔舞台;然而,要在众多店铺中脱颖而出,快速获取商品列表并进行有效营销是关键。
下一篇
开通oss服务