Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18650715
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类:

2008-04-12 17:39:06

在 PHP5 中多了一系列新接口。在 你可以了解到他们的应用。同时这些接口和一些实现的 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 的,虽然大多数情况并不影响我们的使用。
阅读(210) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~