<?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];
}
}