迭代器-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会自动调用接口中的方法实现循环输出