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 app\index\controller; use think\Controller; use TabControl\MyIterator; class Iterator extends Controller { /** * 显示资源列表 * * @return \think\Response */ public function index() { // $obj = MyIterator::getInstance(['a', 'b', 'c']); $obj['name'] = 'tom'; foreach ($obj as $k => $v) { echo $k . ' ' . $v . '<br>'; } $obj[5]; } }

猜你喜欢

转载自www.cnblogs.com/cshaptx4869/p/10416508.html