zoukankan      html  css  js  c++  java
  • php 预定义接口

    Traversable

    Traversable {
    
    }

    作用:检测一个类是否可以使用 foreach 进行遍历的接口。

    php代码中不能用。只有内部的PHP类(用C写的类)才可以直接实现Traversable接口
    php代码中使用Iterator或IteratorAggregate接口来实现遍历。

    这个接口没有任何方法,它的作用仅仅是作为所有可遍历类的基本接口

    #检测一个类的对象是否可以用foreach进行遍历,实现Iterator就可遍历了
    class man{
        
    }
    
    $p = new man();
    var_dump($p instanceof  man); #false
    if( !is_array( $items ) && !$items instanceof Traversable )
            //Throw exception here

    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) {
        echo "{$key}|{$value}";
        echo "
    ";    
    }
    /**
    0|firstelement
    1|secondelement
    2|lastelement
    */

    http://www.nowamagic.net/librarys/veda/detail/2167

    http://www.php.net/manual/zh/reserved.interfaces.php

  • 相关阅读:
    nyoj131 小数相加 循环小时转换分数
    STL 之priority_queue
    XML序列化
    Change the hightlight item color
    TreeView ListView ItemSource
    .NET 下的序列化与反序列化
    WPF: WebBrowser TO Bitmap
    隐藏/显示 Office 标题栏 工具栏 winform webBrowser
    WPF全屏幕窗口
    .Net 注册表操作
  • 原文地址:https://www.cnblogs.com/siqi/p/3670831.html
Copyright © 2011-2022 走看看