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];
}
}
SPL之Iterator和ArrayAccess的结合使用的更多相关文章
- php SPL标准库iterator和ArrayAccess的学习
最近在补充学习php基础的时候看到了spl的介绍,学习了一下iterator和arrayAccess的使用,iterator主要是对象的迭代,一般可以用在容器里面,或者工厂模式里面,最常见的应用场景就 ...
- SPL之Iterator(迭代器)接口
前言:SPL是用于解决典型问题(standard problems)的一组接口与类的集合. <?php /** * Class MyIterator * 在 PHP 中,通常情况下遍历数组使用 ...
- PHP SPL(PHP 标准库)
一.什么是SPL? SPL是用于解决典型问题(standard problems)的一组接口与类的集合.(出自:http://php.net/manual/zh/intro.spl.php) SPL, ...
- PHP预定义接口之 ArrayAccess
最近这段时间回家过年了,博客也没有更新,感觉少学习了好多东西,也错失了好多的学习机会,就像大家在春节抢红包时常说的一句话:一不留神错过了好几亿.废话少说,这篇博客给大家说说关于PHP预定义接口中常用到 ...
- PHP标准库 (SPL) 笔记
简介 SPL是Standard PHP Library(PHP标准库)的缩写. The Standard PHP Library (SPL) is a collection of interfaces ...
- 【SPL标准库专题(9)】 Datastructures:SplObjectStorage
PHP SPL SplObjectStorage是用来存储一组对象的,特别是当你需要唯一标识对象的时候. PHP SPL SplObjectStorage类实现了Countable,Iterator, ...
- 深入浅出 PHP SPL(PHP 标准库)(转)
一.什么是spl库? SPL是用于解决典型问题(standard problems)的一组接口与类的集合. 此扩展只能在php 5.0以后使用,从PHP 5.3.0 不再被关闭,会一直有效.成为php ...
- SPL数据结构
数据结构是计算机存储.组织数据的方式. SPL提供了双向链表.堆栈.队列.堆.降序堆.升序堆.优先级队列.定长数组.对象容器. 基本概念Bottom:节点,第一个节点称Bottom:Top:最后添加的 ...
- PHP SPL标准库-数据结构
SPL是用于解决典型问题的一组接口与类的集合. 双向链表 SplDoublyLinkedList SplStack SplQueue 双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储 ...
随机推荐
- extjs的使用笔记
2006年jack slocum斯洛克姆 基于yui写的扩展前端框架(就是由一些前端可视化组件如表单,树, 表格,等组成的frameset或者叫做 ui engine),叫yui-ext, 后来成熟后 ...
- awk - group adjacent rows by identical columns
Liang always brings me interesting quiz questions. Here is one: If i have a table like below: chr1 1 ...
- 题解——loj6277 数列分块入门1(分块)
分块裸题 然后就是记得左右边界处理和分块的初始化 忘了初始化会被卡成暴力 #include <cstdio> #include <algorithm> #include < ...
- (转)Awesome Knowledge Distillation
Awesome Knowledge Distillation 2018-07-19 10:38:40 Reference:https://github.com/dkozlov/awesome-kno ...
- PHP 冒泡排序(Bubble Sort)
冒泡排序指的是依次比较相邻的两个数,然后根据大小做出排序,直至最后两位数.因为在排序的 过程中总是小数放前面,大数放后面,和气泡上升有点类似,所以又称作冒泡排序. 下面通过一个实例看一下如何实现冒泡排 ...
- 查看iis对应w3wp.exe显示的进程ID号
1.任务管理器,查看,选择列,选择PID(进程标识符) 2.通过cmd查询: 管理员身份运行cmd,跳转到C:\Windows\System32\inetsrv目录,然后运行appcmd list w ...
- 项目Alpha冲刺--1/10
项目Alpha冲刺--1/10 1.团队信息 团队名称:基于云的胜利冲锋队 成员信息 队员学号 队员姓名 个人博客地址 备注 221500201 孙文慈 https://www.cnblogs.com ...
- 【二十八】xml编程(dom\xpath\simplexml)
1.xml基础概念 作用范围: 作为程序通讯的标准. 作为配置文件. 作为小型数据库. xml语法: <根标签> <标签 元素="元素值" ...>< ...
- 安装tensorflow-gpu
pip install --upgrade tensorflow-gpu import tensorflow as tf sess = tf.Session() 如果提示如下 -- ::] Your ...
- go helloworld
// Sample program to show how a bytes.Buffer can also be used // with the io.Copy function. package ...