PHP预定义接口介绍
PHP预定义了6个接口介绍如下:1.Traversable遍历接口
呵呵!其实它不是一个在PHP中可以使用的接口,内部类才可使用,它有一个用途就是检测一个类是否可以遍历。
if($class instanceof Traversable) { //foreach} 2.Iterator迭代器接口
接口摘要:
Iterator extends Traversable{ //返回当前索引游标指向的元素 abstract public mixed current(void) //返回当前索引游标指向的元素的键名 abstract public scalar key(void) //移动当前索引游标指向下一元素 abstract public void next(void) //重置索引游标的指向第一个元素 abstract public void rewind(void) //判断当前索引游标指向的是否是一个元素,常常在调用 rewind()或 next()使用 abstract public boolean valid(void)} 以上可以让一个类实现一个基本的迭代功能,如下可以看到迭代的调用顺序:
classmyIteratorimplementsIterator{ private$position=0 ; private$array= array( "firstelement" , "secondelement" , "lastelement" , ); public function__construct () { $this -> position=0 ; } functionrewind () { var_dump ( __METHOD__ ); $this -> position=0 ; } functioncurrent () { var_dump ( __METHOD__ ); return$this -> array [ $this -> position ]; } functionkey () { var_dump ( __METHOD__ ); return$this -> position ; } functionnext () { var_dump ( __METHOD__ ); ++ $this -> position ; } functionvalid () { var_dump ( __METHOD__ ); return isset( $this -> array [ $this -> position ]); }} $it= newmyIterator ; foreach( $itas$key=>$value ) { var_dump ( $key ,$value ); echo"\n" ;} 3.IteratorAggregate聚合式迭代器接口
接口摘要:
IteratorAggregateextends Traversable{ //获取外部迭代器abstract public Traversable getIterator( void )} getIterator是一个Iterator或Traversable接口的类的一个实例。如下获取外部迭代器实现迭代访问。
classmyDataimplementsIteratorAggregate{ public$property1="Public property one" ; public$property2="Public property two" ; public$property3="Public property three" ; public function__construct () { $this -> property4="last property" ; } public functiongetIterator () { return newArrayIterator ( $this ); }} $obj= newmyData ; foreach( $objas$key=>$value ) { var_dump ( $key ,$value ); echo"\n" ;} 4.ArrayAccess数组式访问接口
接口摘要:
ArrayAccess{ /* 方法 */ abstract public boolean offsetExists( mixed$offset) //检查偏移位置是否存在 abstract public mixed offsetGet( mixed$offset) //获取一个偏移位置的值 abstract public void offsetSet( mixed$offset, mixed$value) //设置一个偏移位置的值 abstract public void offsetUnset( mixed$offset) //复位一个偏移位置的值} 如下可像访问数组一样访问对象:
classobjimplementsarrayaccess{ private$container= array(); public function__construct () { $this -> container= array( "one" =>1 , "two" =>2 , "three"=>3 , ); } public functionoffsetSet ( $offset ,$value ) { if ( is_null ( $offset )) { $this -> container [] =$value ; } else { $this -> container [ $offset ] =$value ; } } public functionoffsetExists ( $offset ) { return isset( $this -> container [ $offset ]); } public functionoffsetUnset ( $offset ) { unset( $this -> container [ $offset ]); } public functionoffsetGet ( $offset ) { return isset( $this -> container [ $offset ]) ?$this -> container [ $offset ] :null ; }} $obj= newobj ; var_dump (isset( $obj [ "two" ]));var_dump ( $obj [ "two" ]);unset( $obj [ "two" ]);var_dump (isset( $obj [ "two" ]));$obj [ "two" ] ="A value" ;var_dump ( $obj [ "two" ]);$obj [] ='Append 1' ;$obj [] ='Append 2' ;$obj [] ='Append 3' ;print_r ( $obj ); 5.Serializable序列化接口
接口摘要:
Serializable{ /* 方法 */ abstract public string serialize( void ) //对象的字符串表示 abstract public mixed unserialize( string $serialized) // 构造对象} 实现该接口的类不再支持__sleep()和__wakeup()。使用很简单,只要序列化对象时serialize方法会被调用,当反序列化时,unserialize方法被调用。
classobjimplementsSerializable{ private$data ; public function__construct () { $this -> data="My private data" ; } public functionserialize () { returnserialize ( $this -> data ); } public functionunserialize ( $data ) { $this -> data=unserialize ( $data ); } public functiongetData () { return$this -> data ; }} $obj= newobj ;$ser=serialize ( $obj );print_r($ser);$newobj=unserialize ( $ser );print_r($newobj); 6.Closure
接口摘要:
Closure{ /* 方法 */ __construct( void ) //用于禁止实例化的构造函数 public static Closure bind( Closure$closure, object $newthis[, mixed$newscope= 'static'] ) //复制一个闭包,绑定指定的$this对象和类作用域。 public Closure bindTo( object $newthis[, mixed$newscope= 'static'] ) //复制当前闭包对象,绑定指定的$this对象和类作用域。}classA{ private static$sfoo=1 ; private$ifoo=2 ;} $cl1= static function() { returnA :: $sfoo ;}; $cl2= function() { return$this -> ifoo ;};$bcl1=Closure :: bind ( $cl1 ,null ,'A' ); $bcl2=Closure :: bind ( $cl2 , newA (),'A' );echo$bcl1 (),"\n" ;echo$bcl2 (),"\n" ; 转载请注明地址: http://www.phpddt.com/php/php-interfaces.html 尊重他人劳动成果就是尊重自己!
页:
[1]