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]; } }
  • 相关阅读:
    ZJOI2017 Day3 滚粗记
    ZJOI2017 Day2
    bzoj4245 [ONTAK2015]OR-XOR (贪心)
    bzoj4631 踩气球 (树状数组+线段树)
    bzoj5219 [Lydsy2017省队十连测]最长路径 (DP)
    bzoj5216 [Lydsy2017省队十连测]公路建设 (线段树)
    bzoj2754 [SCOI2012]喵星球上的点名 (后缀数组+树状数组)
    bzoj2342 [Shoi2011]双倍回文 (manacher)
    bzoj4657 tower (最小割)
    bzoj2064 分裂 (状压dp)
  • 原文地址:https://www.cnblogs.com/cshaptx4869/p/10416508.html
Copyright © 2011-2022 走看看