ArrayAccess接口介绍

2016-01-29 13:44 2 1 收藏

ArrayAccess接口介绍,ArrayAccess接口介绍

【 tulaoshi.com - PHP 】

在 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 的,虽然大多数情况并不影响我们的使用。

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/php/)

来源:https://www.tulaoshi.com/n/20160129/1491311.html

延伸阅读
标签: Web开发
原文地址:5 HTML5 APIs You Didn’t Know Existed 原文日期: 2010年09月27日 翻译日期: 2013年8月7日 当人们看到或者说出"HTML5"这个词的时候,估计至少有一半以上的人,会联想到她既是一个性感而又充满魅力的美女,同时也是一只能把你搞得焦头烂额的独角兽,这能怪我们这些开发者吗? 我们注意到那些基础的Api停滞发展了...
Delphi的接口陷阱现在我所知的有两大陷阱:陷阱一、接口的类型转换陷阱a)       不能把一个对象引用强制转换成这个引用的类型没有声明实现的接口,即使这个对象实际实现了这个接口(呵呵,优点拗口)。b)       当把一个对象变量赋给一个接口变量,在把这个接口变量赋还给对象变量时,...
标签: Java JAVA基础
JDBC接口技术(07-29 10:13:45) 作者:郑林峰 张公忠 JDBC是一种可用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface应用程序设计接口)。它由一些Java语言编写的类和界面组成。JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。 一、OD...
标签: 电脑入门
苹果用户们有个很尴尬的地方,在于他们经常会因为搞错接口而买错设备,原因就在于Mac Pro的USB口旁边还有一个更小的,但是外观却极其相似的接口,一些新手用户和比较粗心的用户,便因此常常搞错接口。那么这两个接口该如何进行分辨呢? 在这里,教大家一个识别方法:两个接口附近,都有一个图标提示,只不过图标过小,需要仔细观察一下,其...
如何通过COM接口得到实现该接口的对象实例问题由来我的程序为一个基于COM的插件结构,框架需要向插件传递一个IResource接口。IResource 需要根据不同的插件传递不同的内容。 接口定义 IResource = Interface(IDispatch)   Function GetPath: String; safecall; End; 实现类 TResource = TClass(TAutoObject, I...

经验教程

39

收藏

12
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部