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]; } }
  • 相关阅读:
    JavaScript入门知识点整理
    正则表达式
    bootstrap css编码规范
    JavaScript高级编程(学习笔记)
    【 D3.js 选择集与数据详解 — 2 】 使用data()绑定数据
    bootstrap table:JQuery中each方法绑定blur事件监听input输入是否合法,进入死循环
    bootstrap-table中导出excel插件bootstrap-table-export使用
    托业考后感
    《Pride and Prejudice》英文版读后记忆
    迷茫的当下,我在做什么
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/10416508.html
Copyright © 2011-2022 走看看