spl 教程三 迭代器


一 Iterator

   迭代器可以让对象使用foreach 去遍历里面的私有属性,而不必关系对象内部的数据结构

二 IteratorAggregate

IteratorAggregate接口(是用来将Iterator接口要求实现的5个方法委托给其他类(比如ArrayIterator)来实现)
(1) ArrayIterator接口:允许从PHP数组中创建一个迭代器。
(2)当ArrayIterator迭代器和IteratorAggregate类一起使用的时候,直接免去Iterator创建方法的工作,所以在实现IteratorAggregate类中的方法getIterator时候,返回一个ArrayIterator接口就好。
(3) IteratorAggregate的c语言实现代码:定义抽象方法getIterator,所以实现接口的时候,必须定义该方法



如果自己不想实现iterator 可以用iteratorAggregate 集合接口来实现


   class SPLIterator  implements Iterator
    {
        private  $index ;
        private  $data ;
        public function __construct($data){
            $this->data = $data;
        }
        public function rewind(){
            $this->index = 0 ;
        }
        public function next(){
            $this->index ++ ;
        }
        public function current(){
            return $this->data[0];
        }
        public function key(){
            return $this->index ;
        }
        public function valid(){
            return isset($this->data[$this->index]);
        }
    }

    /**
     * 如果数据比较复杂,可以使用IteratorAggregate,它支持多维数组
     * Class MyIterator
     */
    class MyIterator implements IteratorAggregate{
        private  $data =[];
        function __construct($data){
            $this->data = $data ;
        }
        /**
         * 必须实现下面的方法,因为是实现的接口
         * @author
         */
        public function getIterator(){
            return new ArrayIterator($this->data);
        }
    }

    $data =[
        'a'  => 1 ,
        'b'  => 1 ,
        'c'  => 1 ,
        'd'  => 1 ,
    ] ;

    $dataSimple =['a' ,'b','c'] ;
    $SPLIterator = new SPLIterator($dataSimple);
    foreach ($SPLIterator as $key => $val) {
        echo $key .'-----' .$val .PHP_EOL ;
    }
    $Myiterator = new MyIterator($data);
    foreach ($Myiterator as $key => $val) {
        echo $key .'-----' .$val .PHP_EOL ;
    }


三 两者区别


(1)iterator 需要自己去实现迭代

(2) IteratorAggreate则不用去关心






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值