当前位置: 首页 > 图文教程 > 网络编程 > PHP > ArrayAccess接口介绍

PHP
PHP 手机归属地查询 api
php 自写函数代码 获取关键字 去超链接
检查url链接是否已经有参数的php代码 添加 ? 或 &
PHP生成网页快照 不用COM不用扩展.
一步一步学习PHP(1) php开发环境配置
一步一步学习PHP(2):PHP类型
一步一步学习PHP(3) php 函数
一步一步学习PHP(4) php 函数 补充2
提高PHP编程效率 引入缓存机制提升性能
php 数组的合并、拆分、区别取值函数集
PHP采集相关教程之一 CURL函数库
IP138 IP地址查询小偷实现代码
php 生成静态页面的办法与实现代码详细版
一步一步学习PHP(5) 类和对象
一步一步学习PHP(6) 面向对象
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
PHP 截取字符串函数整理(支持gb2312和utf-8)
php foreach 使用&(与运算符)引用赋值要注意的问题
PHP IPV6正则表达式验证代码
用PHP ob_start()控制浏览器cache、生成html实现代码

PHP 中的 ArrayAccess接口介绍


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 27 ::
收藏到网摘: n/a

在 PHP5 中多了一系列新接口。在 HaoHappy 翻译的系列文章中 你可以了解到他们的应用。同时这些接口和一些实现的 Class 被归为 Standard PHP Library(SPL)。在 PHP5 中加入了很多特性,使类的重载 (Overloading) 得到进一步的加强。ArrayAccess 的作用是使你的 Class 看起来像一个数组 (PHP的数组)。这点和 C# 的 Index 特性很相似。

下面是 ArrayAccess 的定义:


interface ArrayAccess
boolean offsetExists($index)
mixed offsetGet($index)
void offsetSet($index, $newvalue)
void offsetUnset($index)

由于PHP的数组的强大,很多人在写 PHP 应用的时候经常将配置信息保存在一个数组里。于是可能在代码中到处都是 global。我们换种方式?

如以下代码:

//Configuration Class class Configuration implements ArrayAccess { static private $config; private $configarray; private function __construct() { // init $this->configarray = array("Binzy"=>"Male", "Jasmin"=>"Female"); } public static function instance() { // if (self::$config == null) { self::$config = new Configuration(); } return self::$config; } function offsetExists($index) { return isset($this->configarray[$index]); } function offsetGet($index) { return $this->configarray[$index]; } function offsetSet($index, $newvalue) { $this->configarray[$index] = $newvalue; } function offsetUnset($index) { unset($this->configarray[$index]); } } $config = Configuration::instance(); print $config["Binzy"];


正如你所预料的,程序的输出是"Male"。
如果我们做下面那样的动作:

$config = Configuration::instance(); print $config["Binzy"]; $config['Jasmin'] = "Binzy's Lover"; // config 2 $config2 = Configuration::instance(); print $config2['Jasmin'];


是的,也正如预料的,输出的将是Binzy's Lover。
也许你会问,这个和使用数组有什么区别呢?目的是没有区别的,但最大的区别在于封装。OO 的最基本的工作就是封装,而封装能有效将变化置于内部。也就是说,当配置信息不再保存在一个 PHP 数组中的时候,是的,应用代码无需任何改变。可能要做的,仅仅是为配置方案添加一个新的策略(Strategy)。:

ArrayAccess 在进一步完善中,因为现在是没有办法 count 的,虽然大多数情况并不影响我们的使用。