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的时候,有的时候想解决问题,连 ...
随机推荐
- PyQt5 笔记(01):嵌套布局
PyQt5 有四种布局:水平(QHBoxLayout).竖直(QVBoxLayout).网格(QGridLayout).表单(QFormLayout)在窗体中单一的布局应该不难,但若是比较复杂的布局, ...
- 数据增强利器--Augmentor
最近遇到数据样本数目不足的问题,自己写的增强工具生成数目还是不够,终于在网上找到一个数据增强工具包,足够高级,足够傻瓜.想要多少就有多少!再也不怕数据不够了! 简介 Augmentor是一个Pytho ...
- CF13E Holes LCT
CF13E Holes LG传送门 双倍经验题,几乎同[HNOI2010]弹飞绵羊,LCT练手题,LG没有LCT题解于是发一波. 从当前点向目标点连边,构成一棵树,带修改就用LCT动态维护答案,由于不 ...
- Java并发工具类(三):控制并发线程数的Semaphore
作用 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源. 简介 Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数 ...
- How to use the windows active directory to authenticate user via logon form 如何自定义权限系统,使用 active directory验证用户登录
https://www.devexpress.com/Support/Center/Question/Details/Q345615/how-to-use-the-windows-active-dir ...
- selenium无法正常运行 Chrome浏览器,cannot find Chrome binary的问题
有些同学在运行selenium-chrome时会遇到这个问题, System.setProperty("webdriver.chrome.driver","files/c ...
- VSCode中C/C++库文件的配置
VSCode中C/C++库文件的配置 之前一直在是用sublime做主要编辑器,现在主要使用VSCode,毕竟大厂制作,从目前的使用情况来看,我更喜欢使用VSCode编辑器. 有时候会用VScode来 ...
- centos7 安装jenkenis
安装Java 看到当前系统Java版本的命令: java -version 如果显示Java版本号,说明已经正确安装,如果显示没有该命令,需要安装Java: sudo yum install java ...
- Python学习之路:NumPy初识
import numpy as np; //一维NumPy数组 myArray = np.array([1,2,3,4]); print(myArray); [1 2 3 4] //打印一维数组的形状 ...
- php学习--变量和数据类型
PHP变量 变量 程序执行期间,可以变化的量即为变量. 声明变量 以美元$ 符号声明 注意:(PHP严格区分大小写) 变量名称以 字母.或下划线开始,后面跟上数字/字母/下划线,不能包含特殊字符 ...