天天看點

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

繼續閱讀