zoukankan      html  css  js  c++  java
  • SPL之Iterator和ArrayAccess的结合使用

    <?php
    
    namespace TabControl;
    
    class MyIterator implements Iterator, ArrayAccess
    {
        private $data = [];
        private static $obj = null;
    
        private function __construct($data)
        {
            $this->data = $data;
        }
    
        public static function getInstance(array $data)
        {
            if (is_null(self::$obj)) {
                self::$obj = new self($data);
            }
            return self::$obj;
        }
    
        public function rewind()
        {
            // TODO: Implement rewind() method.
            dump(__METHOD__);
            reset($this->data);
        }
    
        public function valid()
        {
            // TODO: Implement valid() method.
            dump(__METHOD__);
            return isset($this->data[key($this->data)]);
        }
    
        public function key()
        {
            // TODO: Implement key() method.
            dump(__METHOD__);
            return key($this->data);
        }
    
        public function current()
        {
            // TODO: Implement current() method.
            dump(__METHOD__);
            return current($this->data);
        }
    
        public function next()
        {
            // TODO: Implement next() method.
            dump(__METHOD__);
            next($this->data);
        }
    
        public function offsetExists($offset)
        {
            // TODO: Implement offsetExists() method.
            dump(__METHOD__);
            return isset($this->data[$offset]);
        }
    
        public function offsetGet($offset)
        {
            // TODO: Implement offsetGet() method.
            dump(__METHOD__);
            if (!$this->offsetExists($offset)){
                throw new InvalidArgumentException('下标不存在');
            }
            return $this->data[$offset];
        }
    
        public function offsetSet($offset, $value)
        {
            // TODO: Implement offsetSet() method.
            dump(__METHOD__);
            $this->data[$offset] = $value;
        }
    
        public function offsetUnset($offset)
        {
            // TODO: Implement offsetUnset() method.
            dump(__METHOD__);
            unset($this->data[$offset]);
        }
    }
    // 控制器中调用

    <?php namespace appindexcontroller; use thinkController; use TabControlMyIterator; class Iterator extends Controller { /** * 显示资源列表 * * @return hinkResponse */ public function index() { // $obj = MyIterator::getInstance(['a', 'b', 'c']); $obj['name'] = 'tom'; foreach ($obj as $k => $v) { echo $k . ' ' . $v . '<br>'; } $obj[5]; } }
  • 相关阅读:
    ViewModel和LiveData问题思考与解答
    vps_centos_7_系统环境常规配置备忘
    JVM内存管理&GC
    sping注解
    ibatis order by 防止sql注入
    好用的绿色工具(mss2sql,jd-gui)
    mysql优化
    Spring事务
    好文分享_java堆栈的区别
    Linux usual cmd
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/10416508.html
Copyright © 2011-2022 走看看