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 双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储 ...
随机推荐
- makefile基本操作
多数内容copy自youtube的一个视频:https://www.youtube.com/watch?v=E1_uuFWibuM 执行环境:原作者是在Linux下做的视频,而我使用的是win10,w ...
- codevs1017乘积最大
codevs1017 乘积最大 题目描述 Description 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场 ...
- 解决Win10 Git图标不显示问题
升级系统到win10 1803版本以后发现TortoiseGit的忽略图标不显示了 开始以为是版本问题,将TortoiseGit版本进行了升级还是不行 网上查找以后发现 Windows Explore ...
- Elasticsearch 异常处理
cluster_block_exception https://stackoverflow.com/questions/50609417/elasticsearch-error-cluster-blo ...
- SQL中的字母的大小写转换
http://blog.csdn.net/dxb601/article/details/52086830 update 表名 set 字段名a= Lower(字段a) 2.将小写字母转化成大写字母 ...
- Twenty score
1.上图中有两个人对读书的看法有较大的不同. There are two people in the cartoon who treat books in completely different w ...
- Tomcat下webapps夹中root文件夹作用及如何发布项目至root文件夹中
转载请注明出处: tomcat的root文件夹下面默认是tomcat的管理程序,但是如果你把自己的web项目发布到root下面的话,你可以不通过项目名直接访问你的项目,比如,你见了一个名为Test的项 ...
- jquery选择器扩展之样式选择器
https://github.com/wendux/style-selector-jQuery-plugin http://blog.csdn.net/duwen90/article/details/ ...
- Gym 100247B Similar Strings(哈希+思维)
https://vjudge.net/problem/Gym-100247B 题意: 如果两个字符串通过映射后是一样的,则说明这两个字符串是相似的,现在给出n个字符串,计算出有多少组字符串是相似的. ...
- java web 工程更改名字
如图: 将工程名字struts2Project02更改为struts2Project03,步骤如下: 1. 右键工程名字,选中properties,如图 2.更改项目名字 3.第2步已经真正把项目名字 ...