ArrayAccess 接口介绍

  在 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。我们换种方式?
  如以下代码:    
  1. //Configuration Class
  2. class Configuration implements ArrayAccess
  3. {
  4.    static private $config;
  5.    private $configarray;
  6.    private function __construct()
  7.    {
  8.        // init
  9.        $this->configarray = array("Binzy"=>"Male", "Jasmin"=>"Female");
  10.    }
  11.    public static function instance()
  12.    {
  13.        //
  14.        if (self::$config == null)
  15.        {
  16.            self::$config = new Configuration();
  17.        }
  18.        return self::$config;
  19.    }
  20.    function offsetExists($index)
  21.    {
  22.        return isset($this->configarray[$index]);
  23.    }
  24.    function offsetGet($index) {
  25.        return $this->configarray[$index];
  26.    }
  27.    function offsetSet($index, $newvalue) {
  28.        $this->configarray[$index] = $newvalue;
  29.    }
  30.    function offsetUnset($index) {
  31.        unset($this->configarray[$index]);
  32.    }
  33. }
  34. $config = Configuration::instance();
  35. print $config["Binzy"];
  正如你所预料的,程序的输出是"Male"。
  如果我们做下面那样的动作:
  1. $config = Configuration::instance();
  2. print $config["Binzy"];
  3. $config['Jasmin'] = "Binzy's Lover";
  4. // config 2
  5. $config2 = Configuration::instance();
  6. print $config2['Jasmin'];
  是的,也正如预料的,输出的将是Binzy's Lover。
  也许你会问,这个和使用数组有什么区别呢?目的是没有区别的,但最大的区别在于封装。OO的最基本的工作就是封装,而封装能有效将变化置于内部。也就是说,当配置信息不再保存在一个PHP数组中的时候,是的,应用代码无需任何改变。可能要做的,仅仅是为配置方案添加一个新的策略(Strategy)。:

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

Binzy Wu <binzywu@gmail.com>
2004-11-28

参考:
1. 《PHP5 Power Programming》
2. 《设计模式》
3. 《面向对象分析与设计》
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值