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方法就是接口的一种变相实现
  • 相关阅读:
    [001]
    SpringBoot默认首页跳转设置
    Tomcat网站根目录设置
    SpringBoot获取前端传递JSON的几种方法
    MySQL调优性能监控之show profile
    MySQL新特性MTS
    Java线程池拒绝策略
    快速排序与荷兰国旗及Partition问题
    数据结构与算法之返回最小和问题
    MySQL之谓词下推
  • 原文地址:https://www.cnblogs.com/chenqionghe/p/4735735.html
Copyright © 2011-2022 走看看