SPL基础接口(4)

·SPL的基础接口里面定义了最常用的接口
 -Countable
  ·继承了该接口的类可以直接调用count()得到元素个数
 -OuterIterator
  ·如果想对迭代器进行一定的处理之后再返回,可以用这个接口
 -RecursiveIterator
  ·可以对多层结构的迭代器进行迭代,比如遍历一棵树
 -SeekableIterator
  ·可以通过seek方法定位到集合里面的某个特定元素


1.Countable
·在代码里面精彩可以直接用count($obj)方法获得对象里面的元素的个数
count(array('name'=>'Peter','id'=>'5'));
实例:
<?php

$array = array(
array('name'=>'Jonathan','id'=>'5'),
array('name'=>'Jona','id'=>'2'),
array('name'=>'than','id'=>'3')
);


echo count($array)."<br>";
echo count($array[1])."<br>";
?>
<!-- 调用接口进行实现数量 -->
<?php
class CountMe implements Countable{
protected $_myCount=3;
// 一定要是count()方法
public function count(){
return $this->_myCount;
}
}


$obj = new CountMe();
echo count($obj);


?>


2.OuterIterator
  -如果想对迭代器进行一定的处理之后再返回,可以用这个接口
  -IteratorIterator类是OuterIterator的实现,扩展的时候可以直接继承IteratorIterator


实例:
<?php
date_default_timezone_set('prc');
$array = ['Value1','Value2','Value3','Value4'];
$outerObj =new OuterImpl(new ArrayIterator($array));


foreach ($outerObj as $key => $value) {
echo '++'.$key." - ".$value."<br>";
}


class OuterImpl extends IteratorIterator{
// 对值进行处理
public function current(){
return parent::current()."_tail";
}
// 对键进行处理
public function key(){
return "Pre_".parent::key();
}
}


?>


3.RecursiveIterator
  -可以对多层结构的迭代器进行迭代,比如遍历一棵树
  -所有具有层次结构特点的数据都可以用这个接口遍历 
  ·如:文件夹
  -关键方法
  ·hasChildren方法用于判断当前节点是否存在子节点
  ·getChildren方法用于得到当前节点子节点的迭代器
 ·SPL中实现该接口的类
  -RecursiveArrayIterator,RecursiveCachingIterator等以Recursive开头的类都能够进行多层次结构化的遍历




4.SeekableIterator
-可以通过seek方法定位到集合里面的某个特定元素
-seek方法的参数是元素的位置,从0开始计算
 ·SPL中实现该类接口的方法
-ArrayIterator、DirectoryIterator、FilesystemIterator、
 GlobIterator、RecursiveArrayIterator、RecursiveDirectoryIterator

猜你喜欢

转载自blog.csdn.net/qq402507269/article/details/50792324