设为首页 收藏本站
查看: 804|回复: 0

[经验分享] PHP预定义接口介绍

[复制链接]
发表于 2018-12-16 12:39:47 | 显示全部楼层 |阅读模式
  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 尊重他人劳动成果就是尊重自己!



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-652005-1-1.html 上篇帖子: PHP—像使用数组一样使用对象 下篇帖子: php多进程实验笔记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表