迭代器-php预定义接口
循环输出数组
<?php $arr=["小王","小杜","小高","小刘"]; //重置数组指针,并且指向数组中第一个元素 reset($arr); while(key($arr)!==null){ //验证键是否有效 echo key($arr)."-". current($arr)."<br>"; //指针下移 next($arr); } ?>
使用预定义接口 实现接口的方法,在我们foreach循环的时候,会自动调用方法
<?php //创建一个类 并实现预定义接口 class DieDai implements Iterator{ private $list=array(); //实现预定义中的接口方法 //实现重置指针方法 public function rewind(){ reset($this->list); } //实现值的方法 public function current(){ return current($this->list); } //实现验证方法 public function valid(){ return key($this->list)!==null; } //实现当前元素的键 public function key(){ return key($this->list); } //实现指针下移 public function next(){ next($this->list); } public function add($name){ $this->list[]=$name; } } $obj= new DieDai(); $obj->add("小杜"); $obj->add("小王"); $obj->add("小高"); $obj->add("小刘"); foreach($obj as $k=>$v){ echo $k."----".$v."<br>"; }
注意:
如果不实现接口,那foreach循环对象,会报错,提示把数组转换成字符串,如果实现了Iterator接口,foreach会自动调用接口中的方法实现循环输出