[ 永远的UNIX::UNIX技术资料的宝库 ]

首页 > 编程技术 > Php > 正文
 

ArrayAccess 接口介绍

作者:Binzy Wu 来源:www.openphp.cn (2007-02-06 11:14:12)

  在 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.

  2. //Configuration Class

  3. class Configuration implements ArrayAccess

  4. {

  5.

  6. static private $config;

  7.

  8. private $configarray;

  9.

  10. private function __construct()

  11. {

  12. // init

  13. $this->configarray = array("Binzy"=>"Male", "Jasmin"=>"Female");

  14. }

  15.

  16. public static function instance()

  17. {

  18. //

  19. if (self::$config == null)

  20. {

  21. self::$config = new Configuration();

  22. }

  23.

  24. return self::$config;

  25. }

  26.

  27. function offsetExists($index)

  28. {

  29. return isset($this->configarray[$index]);

  30. }

  31.

  32. function offsetGet($index) {

  33. return $this->configarray[$index];

  34. }

  35.

  36. function offsetSet($index, $newvalue) {

  37. $this->configarray[$index] = $newvalue;

  38. }

  39.

  40. function offsetUnset($index) {

  41. unset($this->configarray[$index]);

  42. }

  43. }

  44.

  45. $config = Configuration::instance();

  46. 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

  2004-11-28

  参考:

  1. 《PHP5 Power Programming》

  2. 《设计模式》

  3. 《面向对象分析与设计》


(http://www.fanqiang.com)

原文链接:http://www.openphp.cn/index.php/article/2/160/index.html

 
 相关文章
RAID原理,磁盘阵列(Disk Array)原理 2001-10-20 13:05:00
用 PHP5 轻松解析 XML 2007-02-06 11:02:03
在PHP中全面阻止SQL注入式攻击之三 2007-02-05 17:46:59
如何利用内置PHP灵活性执行外部程序 2007-02-05 17:16:03
通过PHP连接My SQL的两种方法简介 2007-02-01 10:36:49
PHP实现多web服务器共享SESSION数据 2006-07-10 17:01:40
IBM、Oracle把PHP应用到SOA中 2006-06-26 12:09:07
 

★  感谢所有的作者为我们学习技术知识提供了一条捷径  ★
www.fanqiang.com