public function seek ( $position ) { if (!isset( $this -> array [ $position ])) { throw new OutOfBoundsException ( "invalid seek position ( $position )" ); }
$this -> position = $position ; }
public function rewind () { $this -> position = 0 ; }
public function current () { return $this -> array [ $this -> position ]; }
public function key () { return $this -> position ; }
public function next () { ++ $this -> position ; }
public function valid () { return isset( $this -> array [ $this -> position ]); } }
try {
$it = new MySeekableIterator ; echo $it -> current (), "
" ;
$it -> seek ( 2 ); echo $it -> current (), "
" ;
$it -> seek ( 1 ); echo $it -> current (), "
" ;
$it -> seek ( 10 );
} catch ( OutOfBoundsException $e ) { echo $e -> getMessage (); } /* 结果: first element third element second element invalid seek position ( 10 ) */
SplObserver和SplSubject接口: SplObserver和SplSubject接口用来实现观察者设计模式,观察者设计模式是指当一个类的状态发生变化时,依赖它的对象都会收到通知并更新。使用场景非常广泛,比如说当一个事件发生后,需要更新多个逻辑操作,传统方式是在事件添加后编写逻辑,这种代码耦合并难以维护,观察者模式可实现低耦合的通知和更新机制。 看看SplObserver和SplSubject的接口结构: 复制代码 代码如下: //SplSubject结构 被观察的对象 interface SplSubject{ public function attach(SplObserver $observer); //添加观察者 public function detach(SplObserver $observer); //剔除观察者 public function notify(); //通知观察者 }
//SplObserver结构 代表观察者 interface SplObserver{ public function update(SplSubject $subject); //更新操作 }