最近在补充学习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. RMAN 与control文件和spfile文件的备份

    以10.2为例,官方文档如此说: http://docs.oracle.com/cd/B19306_01/backup.102/b14191/rcmconc1.htm The RMAN behavio ...

  2. PostgreSQL处理xml数据初步

    磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面:PostgreSQL基础知识与基本操作索引页    回到顶级页面:PostgreSQL索引页[作者 高健@博客园  luckyjackgao@g ...

  3. 苏州Uber优步司机奖励政策(4月24日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  4. [NOIp2016]天天爱跑步 线段树合并

    [NOIp2016]天天爱跑步 LG传送门 作为一道被毒瘤出题人们玩坏了的NOIp经典题,我们先不看毒瘤的"动态爱跑步"和"天天爱仙人掌",回归一下本来的味道. ...

  5. 洛咕P3250 [HNOI2016]网络 整体二分

    这题太神仙了必须写博客... 显然可以想到二分答案.二分一个答案mid,如果所有长度\(\geq mid\)的路径都过x,那么答案一定\(<mid\),否则答案\(\geq mid\). 那么就 ...

  6. JAVAWEB 遍历mysql结果集时 字段为0、false、null的问题

    foreach遍历查询mysql中的tinyint字段时一直查都是各种0,false,null 发现原来是实体类中的变量名和mysql中的列名不一样出的bug 所以说列名和实体类中的相关变量名是要保持 ...

  7. 关于恶意说说自动在QQ空间转发的机制

    有些很讨厌的带链接说说,只要你在手机打开它,就会自动转发,内容极其不雅 一怒之下我决定看个究竟首先,在此页开头有此关键语句: <iframe src="http://rtb.map.q ...

  8. nginx 部署前期一定要关闭selinux

    nginx 报错: 1389#1389: *40 "/home/data1/index.html" is forbidden (13: Permission denied), cl ...

  9. centos下安装docker,kubelet kubeadm kubectl

    目录 安装docker 安装命令 安装 kubelet kubeadm kubectl 安装命令 安装docker 安装命令 yum install docker -y 启动 systemctl en ...

  10. GsonFormat插件主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高。

    GsonFormat插件主要用于使用Gson库将JSONObject格式的String 解析成实体,该插件可以加快开发进度,使用非常方便,效率高. 插件地址:https://plugins.jetbr ...