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方法就是接口的一种变相实现
  • 相关阅读:
    Unzip 解压报错
    Linux ftp安装
    关于vsftp出现Restarting vsftpd (via systemctl): Job for vsftpd.service failed because the control 的解决办法
    ASP.NET开发知识总结
    移动端开发调试方法总结
    移动H5优化指南
    基于windows下,node.js之npm
    微服务理解
    SQL Server 触发器
    jQuery验证控件jquery.validate.js使用说明+中文API
  • 原文地址:https://www.cnblogs.com/chenqionghe/p/4735735.html
Copyright © 2011-2022 走看看