php SPL标准库iterator和ArrayAccess的学习
最近在补充学习php基础的时候看到了spl的介绍,学习了一下iterator和arrayAccess的使用,iterator主要是对象的迭代,一般可以用在容器里面,或者工厂模式里面,最常见的应用场景就是laravel的容器了,arrayAccess也是这样的,那么我们接下来就看下他们是怎么使用的吧。
iterator简易demo如下:
<?php
class TestIterator implements Iterator
{
private $arr = [];
private $key = 0;
public function __construct(array $arr)
{
$this->arr = $arr;
}
public function rewind()
{
echo __METHOD__.PHP_EOL;
$this->key = 0;
}
public function current()
{
echo __METHOD__.PHP_EOL;
return $this->arr[$this->key];
}
public function next()
{
echo __METHOD__.PHP_EOL;
++$this->key;
}
public function valid()
{
echo __METHOD__.PHP_EOL;
return isset($this->arr[$this->key]);
}
public function key()
{
return $this->key.PHP_EOL;
}
}
$test = new TestIterator(['apple','orange','banana']);
foreach ($test as $k => $v) {
var_dump($v);
}
//输出为:
TestIterator::rewind
TestIterator::valid
TestIterator::current
/Users/icarus/Code/php/itertaor.php:46:
string(5) "apple"
TestIterator::next
TestIterator::valid
TestIterator::current
/Users/icarus/Code/php/itertaor.php:46:
string(6) "orange"
TestIterator::next
TestIterator::valid
TestIterator::current
/Users/icarus/Code/php/itertaor.php:46:
string(6) "banana"
TestIterator::next
TestIterator::valid
ArrayAccess示例demo如下:
<?php
class TestArrayAccess implements ArrayAccess
{
private $arr = [];
public function __construct(Array $arr)
{
$this->arr = $arr;
}
public function offsetExists($offset)
{
echo __METHOD__ . PHP_EOL;
return isset($this->arr[$offset]);
}
public function offsetGet($offset)
{
echo __METHOD__.PHP_EOL;
return $this->arr[$offset];
}
public function offsetSet($offset, $value)
{
echo __METHOD__.PHP_EOL;
$this->arr[$offset] = $value;
}
public function offsetUnset($offset)
{
echo __METHOD__ .PHP_EOL;
unset($this->arr[$offset]);
}
}
$test = new TestArrayAccess(['person'=>'man','fruit'=>'apple']);
var_dump($test['person']);
var_dump($test['children']);
$test['hello'] ='world';
var_dump($test['hello']);
iteroatr是用来迭代用的,而arrayaccess主要是用来当作数组用的,组合起来更加强大,可以参考pimple项目。本文主要是用来记录和学习用的。
php SPL标准库iterator和ArrayAccess的学习的更多相关文章
- php spl标准库简介(SPL是Standard PHP Library(PHP标准库)(直接看代码实例,特别方便)
php spl标准库简介(SPL是Standard PHP Library(PHP标准库)(直接看代码实例,特别方便) 一.总结 直接看代码实例,特别方便易懂 thinkphp控制器利眠宁不支持(说明 ...
- PHP的SPL标准库里面的堆(SplHeap)怎么使用
PHP的SPL标准库里面的堆(SplHeap)怎么使用 一.总结 1.因为SplHeap是抽象类,所以要先继承,实现里面的抽象方法compare后,才能new对象使用. 二.PHP的SPL标准库里面的 ...
- PHP SPL标准库-接口
PHP SPL标准库有一下接口: Countable OuterIterator RecursiveIterator SeekableIterator SplObserver SplSubject A ...
- PHP SPL标准库之数据结构栈(SplStack)介绍(基础array已经可以解决很多问题了,现在开始解决问题)
PHP SPL标准库之数据结构栈(SplStack)介绍(基础array已经可以解决很多问题了,现在开始解决问题) 一.总结 SplStack就是继承双链表(SplDoublyLinkedList)实 ...
- 【SPL标准库专题(1)】 SPL简介
什么是SPL SPL是Standard PHP Library(PHP标准库)的缩写. 根据官方定义,它是"a collection of interfaces and classes th ...
- PHP 设计模式 笔记与总结(3)SPL 标准库
SPL 库的使用(PHP 标准库) 1. SplStack,SplQueue,SplHeap,SplFixedArray 等数据结构类 ① 栈(SplStack)(先进后出的数据结构) index.p ...
- 【SPL标准库专题(9)】 Datastructures:SplObjectStorage
PHP SPL SplObjectStorage是用来存储一组对象的,特别是当你需要唯一标识对象的时候. PHP SPL SplObjectStorage类实现了Countable,Iterator, ...
- PHP SPL标准库-数据结构
SPL是用于解决典型问题的一组接口与类的集合. 双向链表 SplDoublyLinkedList SplStack SplQueue 双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储 ...
- Python 标准库一览(Python进阶学习)
转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...
随机推荐
- JavaScript总结(四)
详解BOM(浏览器对象模型(Browser Object Model)) ✍ Window对象方法 方法 描述 alert() 显示带有一段消息和一个确认按钮的警告框 blur() 把键盘焦点从顶层窗 ...
- CF 348 D. Turtles
D. Turtles 链接 题意: 给定一个N*M的棋盘,有些格子不能走,问有多少种从(1,1)到(N,M)的两条不相交路径. 分析: lGV定理. 定理:点集A={a1,a2,…an}A={a1,a ...
- iOS开发-通过正则表达式进行各种判断银行卡,车牌号,邮箱地址,QQ,身份证,全字母,仅输入字母或数字同时包含大小写字母和数字,仅能输入中文等
/* * 验证银行卡号是否正确 * 车牌号验证 * 检验邮箱地址是否正确 * 手机号中间四位密文显示 * 判断QQ号是否正确(5-11位) * 判断身份证号是否正确(如末位为字母请用“x” ...
- springmvc 解决@ResponseBody注解返回中文乱码
使用messageConverters <bean class="org.springframework.web.servlet.mvc.method.annotation.Reque ...
- 新买的orico蓝牙usb连接器使用方法与驱动
因为买的型号是 BTA-403 ,所以需要下载该型号驱动 安装好后,可能会出现找不到蓝牙设备问题,所以需要重启机器,并且手动将pc蓝牙连接到手机蓝牙,然后手机蓝牙再连接蓝牙耳机,此时蓝牙耳机会显示连接 ...
- django 部署一个简单的博客系统
转:https://www.cnblogs.com/fnng/p/3737964.html 写的目的, 加深影响,熟悉开发流程, 开发都是练出来的. 环境 python3.5 windows 7 1. ...
- 自动化jenkins报:ModuleNotFoundError: No module named 'common'
直接执行脚本是没有问题,报如下错误: 你已经在run.py脚本加路径了为什么还会报这个错呢,就是你加的路径,应该在所有的包上面,才不会报这个错,如下: 注:以下是我的解决方法仅作参考.如果我的发表的内 ...
- Python学习之路:一天搞定基础部分
~代表省略的内容,如变量名.字符串等等 1.Pyhton中比较特别的运算: **:代表指数运算,例如2**3 = 8 //:代表整除运算,这一点和Java不同 2.Python的注释: #:单行注释 ...
- 利用workbench对linux/Ubuntu系统中的mysql数据库进行操作
在上一篇文章中,我分享了在linux中如何安装mysql数据库,但是这只是安装了mysql的服务,并没有图形化管理界面,所以这样子操作起来并没有那么方便,那么现在我们就来实现如何利用在window中安 ...
- Spring AOP 报错org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'XXXXXX' defined in class path resource..........
完整报错如下: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'befo ...