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]; } }
  • 相关阅读:
    3.JavaWeb过滤器/拦截器/监听器及AOP编程的理解
    flex弹性盒里order属性示例
    flex的align-content、align-items的介绍
    flex的justify-content
    flex属性介绍
    flex模式下的导航条示例
    less变量用法讲解
    css变量的引用
    透视图的设置
    图片飞出效果
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/10416508.html
Copyright © 2011-2022 走看看