zoukankan      html  css  js  c++  java
  • PHP接口的思考

    其中就有一个SPL(标准PHP库)的尝试,SPL中实现一些接口,其中最主要的就是Iterator迭代器接口,通过实现这个接口,就能使对象能够用于foreach结构,从而在使用形式上比较统一.比如SPL中有一个DirectoryIterator类,这个类在继承SplFileInfo类的同时,实现Iterator,Traversable,SeekableIterator这三个接口,那么这个类的实例可以获得父类SplFileInfo的全部功能外,还能够实现Iterator接口所展示的那么操作.

     
    Directory类之所以拿来就能用,是因为系统已经实现了Iterator接口,所以可以像下面这样使用:
    $dir = new DirectoryIterator(dirname(__FILE__));
    foreach($dir as $fileinfo)
    {
        if(!$fileinfo->isDir())
        {
            echo $fileinfo->getFilename(),"	",$fileinfo->getSize(),PHP_EOL;
        }
    }
    
    可以想像,如果不用DirectoryIterator类,而是自己实现,不但代码量增加了,而且循环的时候风格也不统一了.如果自己写的类也实现了Iterator接口,那么就可以像Iterator那样工作.
    为什么一个类只要实现了Iterator迭代器,其对象就可以被用作foreach的对象呢?其实原因很简单,在对PHP实例对象使用foreach语法时,会检查这个实例有没有实现Iterator接口,如果实现了,就会通过内置方法或使用实现类中的方法模拟foreach语句.这和__toString方法实现很像, 事实上,__toString方法就是接口的一种变相实现
  • 相关阅读:
    用于区分IE的:条件注释
    详解css:background
    scrollTop总为零原因;如何查看滚动条的位置或者说滚动条的滚动距离(待完善)
    过滤器Filter与监听器Listener
    JSP标签
    servlet
    JSP
    一个CSS简单入门网站
    开始写博客了!
    _nop()
  • 原文地址:https://www.cnblogs.com/chenqionghe/p/4735735.html
Copyright © 2011-2022 走看看