PHP的ArrayAccess接口简介
2015-12-24 21:27
771 查看
最近在研究php微框架slim的源码,slim中的依赖注入基于pimple,于是又去学习了一下pimple。
对比之前自己写的依赖注入类,pimple有一个很新鲜的用法,不是采用
而是以数组方式进行注入:
看源码时才发现原来诀窍就在php5提供的ArrayAccess接口上。
php文档地址如下:http://www.php.net/manual/zh/class.arrayaccess.php
官方定义:提供像访问数组一样访问对象的能力的接口。
该接口主要定义了四个抽象方法:
下面以一个简单的例子来实际说明下该接口的使用:
执行结果如下:
对比之前自己写的依赖注入类,pimple有一个很新鲜的用法,不是采用
$container->session_storage = function ($c) { return new $c['session_storage_class']($c['cookie_name']); };
而是以数组方式进行注入:
$container['session_storage'] = function ($c) { return new $c['session_storage_class']($c['cookie_name']); };
看源码时才发现原来诀窍就在php5提供的ArrayAccess接口上。
php文档地址如下:http://www.php.net/manual/zh/class.arrayaccess.php
官方定义:提供像访问数组一样访问对象的能力的接口。
该接口主要定义了四个抽象方法:
abstract public boolean offsetExists ( mixed $offset ) #检查数据是否存在 abstract public mixed offsetGet ( mixed $offset ) #获取数据 abstract public void offsetSet ( mixed $offset , mixed $value ) #设置数据 abstract public void offsetUnset ( mixed $offset ) #删除数据
下面以一个简单的例子来实际说明下该接口的使用:
<?php class Container implements ArrayAccess { private $s=array(); public function offsetExists($key){ echo "you're trying to check if something exist<br/>"; return array_key_exists($key, $this->s); } public function offsetGet($key){ echo "you're trying to get something<br/>"; return isset($this->s[$key]) ? $this->s[$key] : ''; } public function offsetSet($key, $value){ echo "you're trying to set something<br/>"; $this->s[$key] = $value; } public function offsetUnset($key){ echo "you're trying to unset something<br/>"; unset($this->s[$key]); } } $c = new Container(); $c['name'] = 'ben'; //调用了offsetSet echo $c['name']."<br />"; //调用了offsetGet echo empty($c['age'])."<br />"; //调用了offsetExists unset($c['name']); //调用了offsetUnset echo empty($c['name']);
执行结果如下:
you're trying to set something you're trying to get something ben you're trying to check if something exist 1 you're trying to unset something you're trying to check if something exist 1
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- PHP VBS JS 函数 对照表
- C语言实现的统计php代码行数功能源码(支持文件夹、多目录)
- php xml 入门学习资料