<?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]; } }
原文:https://www.cnblogs.com/cshaptx4869/p/10416508.html