1. 云栖社区>
  2. PHP教程>
  3. 正文

spl 教程三 迭代器

作者:用户 来源:互联网 时间:2017-11-30 16:18:21

迭代教程spl

spl 教程三  迭代器 - 摘要: 本文讲的是spl 教程三 迭代器, 一 Iterator    迭代器可以让对象使用foreach 去遍历里面的私有属性,而不必关系对象内部的数据结构 二 IteratorAggregate IteratorAggregate接口(是用来将Iterator接口要求实现


一 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则不用去关心






以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索迭代 , 教程 spl ,以便于您获取更多的相关知识。