這篇文章主要介紹了PHP SPL標準庫之接口(Interface)詳解,本文分別講解了Coutable接口、OuterIterator接口、RecursiveIterator接口、SeekableIterator接口、SplObserver和SplSubject接口等內容,需要的朋友可以參考下
PHP SPL標準庫總共有6個接口,如下:
1.Countable
2.OuterIterator
3.RecursiveIterator
4.SeekableIterator
5.SplObserver
6.SplSubject
其中OuterIterator、RecursiveIterator、SeekableIterator都是繼承Iterator類的,下面會對每種接口作用和使用進行詳細說明。
Coutable接口:
實現Countable接口的對象可用于count()函數計數。
代碼如下:
class Mycount implements Countable
{
public function count()
{
static $count = 0;
$count++;
return $count;
}
}
$count = new Mycount();
$count->count();
$count->count();
echo count($count); //3
echo count($count); //4
說明:
調用count()函數時,Mycount::count()方法被調用
count()函數的第二個參數將不會產生影響
OuterIterator接口:
自定義或修改迭代過程。
代碼如下:
//IteratorIterator是OuterIterator的一個實現類
class MyOuterIterator extends IteratorIterator {
public function current()
{
return parent::current() . 'TEST';
}
}
foreach(new MyOuterIterator(new ArrayIterator(['b','a','c'])) as $key => $value) {
echo "$key->$value".PHP_EOL;
}
/*
結果:
0->bTEST
1->aTEST
2->cTEST
*/
在實際運用中,OuterIterator極其有用:
代碼如下:
$db = new PDO('mysql:host=localhost;dbname=test', 'root', 'mckee');
$db->query('set names utf8');
$pdoStatement = $db->query('SELECT * FROM test1', PDO::FETCH_ASSOC);
$iterator = new IteratorIterator($pdoStatement);
$tenRecordArray = iterator_to_array($iterator);
print_r($tenRecordArray);
RecursiveIterator接口:
用于循環迭代多層結構的數據,RecursiveIterator另外提供了兩個方法:
RecursiveIterator::getChildren 獲取當前元素下子迭代器
RecursiveIterator::hasChildren 判斷當前元素下是否有迭代器
代碼如下:
class MyRecursiveIterator implements Recursi
{
private $_data;
private $_position = 0;
public function __construct(array $data) {
$this->_data = $data;
}
public function valid() {
return isset($this->_data[$this->_position]);
}
public function hasChildren() {
return is_array($this->_data[$this->_position]);
}
public function next() {
$this->_position++;
新聞熱點
疑難解答