为了账号安全,请及时绑定邮箱和手机立即绑定

PHP预定义接口介绍

标签:
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)  }


以上可以让一个类实现一个基本的迭代功能,如下可以看到迭代的调用顺序:

class  myIterator  implements  Iterator  {    private  $position  =  0 ;    private  $array  = array(        "firstelement" ,        "secondelement" ,        "lastelement" ,    );     public function  __construct () {        $this -> position  =  0 ;    }     function  rewind () {        var_dump ( __METHOD__ );        $this -> position  =  0 ;    }     function  current () {        var_dump ( __METHOD__ );        return  $this -> array [ $this -> position ];    }     function  key () {        var_dump ( __METHOD__ );        return  $this -> position ;    }     function  next () {        var_dump ( __METHOD__ );        ++ $this -> position ;    }     function  valid () {        var_dump ( __METHOD__ );        return isset( $this -> array [ $this -> position ]);    }} $it  = new  myIterator ; foreach( $it  as  $key  =>  $value ) {    var_dump ( $key ,  $value );    echo  "\n" ;}


3.IteratorAggregate聚合式迭代器接口
接口摘要:

IteratorAggregate  extends Traversable  { //获取外部迭代器abstract public Traversable getIterator  ( void )}


getIterator是一个Iterator或Traversable接口的类的一个实例。如下获取外部迭代器实现迭代访问。

class  myData  implements  IteratorAggregate  {    public  $property1  =  "Public property one" ;    public  $property2  =  "Public property two" ;    public  $property3  =  "Public property three" ;     public function  __construct () {        $this -> property4  =  "last property" ;    }         public function  getIterator () {        return new  ArrayIterator ( $this );    }} $obj  = new  myData ; foreach( $obj  as  $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  ) //复位一个偏移位置的值}


如下可像访问数组一样访问对象:

class  obj  implements  arrayaccess  {    private  $container  = array();    public function  __construct () {        $this -> container  = array(            "one"    =>  1 ,            "two"    =>  2 ,            "three"  =>  3 ,        );    }    public function  offsetSet ( $offset ,  $value ) {        if ( is_null ( $offset )) {            $this -> container [] =  $value ;        } else {            $this -> container [ $offset ] =  $value ;        }    }    public function  offsetExists ( $offset ) {        return isset( $this -> container [ $offset ]);    }    public function  offsetUnset ( $offset ) {        unset( $this -> container [ $offset ]);    }    public function  offsetGet ( $offset ) {        return isset( $this -> container [ $offset ]) ?  $this -> container [ $offset ] :  null ;    }} $obj  = new  obj ; 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方法被调用。

class  obj  implements  Serializable  {    private  $data ;    public function  __construct () {        $this -> data  =  "My private data" ;    }    public function  serialize () {        return  serialize ( $this -> data );    }    public function  unserialize ( $data ) {        $this -> data  =  unserialize ( $data );    }    public function  getData () {        return  $this -> data ;    }} $obj  = new  obj ;$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对象和类作用域。}


class  A  {    private static  $sfoo  =  1 ;    private  $ifoo  =  2 ;} $cl1  = static function() {    return  A :: $sfoo ;}; $cl2  = function() {    return  $this -> ifoo ;};  $bcl1  =  Closure :: bind ( $cl1 ,  null ,  'A' ); $bcl2  =  Closure :: bind ( $cl2 , new  A (),  'A' );echo  $bcl1 (),  "\n" ;echo  $bcl2 (),  "\n" ;

转载请注明地址: http://www.phpddt.com/php/php-interfaces.html 尊重他人劳动成果就是尊重自己!


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消