最近在补充学习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的学习的更多相关文章

  1. php spl标准库简介(SPL是Standard PHP Library(PHP标准库)(直接看代码实例,特别方便)

    php spl标准库简介(SPL是Standard PHP Library(PHP标准库)(直接看代码实例,特别方便) 一.总结 直接看代码实例,特别方便易懂 thinkphp控制器利眠宁不支持(说明 ...

  2. PHP的SPL标准库里面的堆(SplHeap)怎么使用

    PHP的SPL标准库里面的堆(SplHeap)怎么使用 一.总结 1.因为SplHeap是抽象类,所以要先继承,实现里面的抽象方法compare后,才能new对象使用. 二.PHP的SPL标准库里面的 ...

  3. PHP SPL标准库-接口

    PHP SPL标准库有一下接口: Countable OuterIterator RecursiveIterator SeekableIterator SplObserver SplSubject A ...

  4. PHP SPL标准库之数据结构栈(SplStack)介绍(基础array已经可以解决很多问题了,现在开始解决问题)

    PHP SPL标准库之数据结构栈(SplStack)介绍(基础array已经可以解决很多问题了,现在开始解决问题) 一.总结 SplStack就是继承双链表(SplDoublyLinkedList)实 ...

  5. 【SPL标准库专题(1)】 SPL简介

    什么是SPL SPL是Standard PHP Library(PHP标准库)的缩写. 根据官方定义,它是"a collection of interfaces and classes th ...

  6. PHP 设计模式 笔记与总结(3)SPL 标准库

    SPL 库的使用(PHP 标准库) 1. SplStack,SplQueue,SplHeap,SplFixedArray 等数据结构类 ① 栈(SplStack)(先进后出的数据结构) index.p ...

  7. 【SPL标准库专题(9)】 Datastructures:SplObjectStorage

    PHP SPL SplObjectStorage是用来存储一组对象的,特别是当你需要唯一标识对象的时候. PHP SPL SplObjectStorage类实现了Countable,Iterator, ...

  8. PHP SPL标准库-数据结构

    SPL是用于解决典型问题的一组接口与类的集合. 双向链表 SplDoublyLinkedList SplStack SplQueue 双链表是一种重要的线性存储结构,对于双链表中的每个节点,不仅仅存储 ...

  9. Python 标准库一览(Python进阶学习)

    转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...

随机推荐

  1. Noip前的大抱佛脚----一些思路

    目录 一些思路 序列 函数问题 网格图 删除和询问 乘法问题 顺序问题 最值问题 研究成果 数论分块套数论分块的复杂度 一些思路 Tags:Noip前的大抱佛脚 序列 线段树(当然还要有主席树啊!) ...

  2. STM32通用定时器配置

    一.STM32通用定时器原理 STM32 系列的CPU,有多达8个定时器,其中TIM1和TIM8是能够产生三对PWM互补输出的高级定时器,常用于三相电机的驱动,它们的时钟由APB2的输出产生.其它6个 ...

  3. PHP数据库的 增 删 查

    一.匹配数据库登录 步骤: 1.做一个普通的登录界面,注意提交方式为post. <!--登录界面--> <form action="chuli.php" meth ...

  4. 10.23 开课一个月零十九天 (PHP数组)

    <?php $s = "he8llo5wor6ld"; $s = preg_replace("/\d/","#",$s); //按照正 ...

  5. Atom使用教程

    1.Atom简介 2.安装 官网下载地址:https://atom.io/ 安装目录默认安装在 扩展包的位置 3.推荐扩展包 我的扩展包都是下载好的,直接放在packages文件夹下的 (1)simp ...

  6. .Net Core 管道机制

    开篇先上一张中间件原理图,帮助大家对管道机制形成一个直观的认识 下面我们实现一个简单的管道机制,以此为例深入理解管道机制的原理 1. 首先定义一个委托,该委托接收一个上下文对象,返回值为Task,代码 ...

  7. iOS开发者证书-详解

    iOS开发者证书-详解/生成/使用 本文假设你已经有一些基本的Xcode开发经验, 并注册了iOS开发者账号. 相关基础 加密算法 现代密码学中, 主要有两种加密算法: 对称密钥加密 和 公开密钥加密 ...

  8. html元素可以同时实现两个class的功能

    html元素标签可以放置两个不同的class文件并分别实现效果

  9. Git 个人笔记

     最近在看 Git ,顺便把这些常用命令记录下来,以备以后忘记能查看(未完):   // 设置用户名和邮箱  使用global 表示这台主机上所有的Git仓库都会使用这个配置  也可以对某个仓库指定不 ...

  10. 刨根问底KVO原理

    介绍 KVO( NSKeyValueObserving )是一种监测对象属性值变化的观察者模式机制.其特点是无需事先修改被观察者代码,利用 runtime 实现运行中修改某一实例达到目的,保证了未侵入 ...