PHP SPL标准库之接口(Interface)详解
PHP SPL标准库总共有6个接口,如下: 1.Countable 2.OuterIterator 3.RecursiveIterator 4.SeekableIterator 5.SplObserver 6.SplSubject 其中OuterIterator、RecursiveIterator、SeekableIterator都是继承Iterator类的,下面会对每种接口作用和使用进行详细说明。 Coutable接口:实现Countable接口的对象可用于count()函数计数。 代码如下: $count = new Mycount();
$count->count(); $count->count(); echo count($count); //3 说明: 调用count()函数时,Mycount::count()方法被调用 count()函数的第二个参数将不会产生影响 OuterIterator接口:自定义或修改迭代过程。 代码如下: public function current()
{ return parent::current() . 'TEST'; } } foreach(new MyOuterIterator(new ArrayIterator(['b','a','c'])) as $key => $value) { 在实际运用中,OuterIterator极其有用: 代码如下: 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 判断当前元素下是否有迭代器 代码如下: public function __construct(array $data) {
$this->_data = $data; } public function valid() { public function hasChildren() { public function next() { public function current() { public function getChildren() { public function rewind() { public function key() { $arr = array(0,1=> array(10,20),2,3 => array(1,2)); foreach ($mri as $c => $v) { } SeekableIterator接口:通过seek()方法实现可搜索的迭代器,用于搜索某个位置下的元素。 代码如下: private $position = 0;
private $array = array( public function seek ( $position ) { $this -> position = $position ; public function rewind () { public function current () { public function key () { public function next () { public function valid () { try { $it = new MySeekableIterator ; $it -> seek ( 2 ); $it -> seek ( 1 ); $it -> seek ( 10 ); } catch ( OutOfBoundsException $e ) { SplObserver和SplSubject接口:SplObserver和SplSubject接口用来实现观察者设计模式,观察者设计模式是指当一个类的状态发生变化时,依赖它的对象都会收到通知并更新。使用场景非常广泛,比如说当一个事件发生后,需要更新多个逻辑操作,传统方式是在事件添加后编写逻辑,这种代码耦合并难以维护,观察者模式可实现低耦合的通知和更新机制。 看看SplObserver和SplSubject的接口结构: 代码如下: //SplObserver结构 代表观察者
interface SplObserver{ public function update(SplSubject $subject); //更新操作 } 看下面一个实现观察者的例子: 代码如下: public function attach(SplObserver $observer) { $this->observers[] = $observer; } public function detach(SplObserver $observer) public function notify() } class Observer1 implements SplObserver class Observer2 implements SplObserver $subject = new Subject(); $subject->notify(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |