php专区

 首页 > php专区 > PHP应用 > 常用功能 > ArrayAccess接口介绍 - php高级应用

ArrayAccess接口介绍 - php高级应用

分享到:
【字体:
导读:
          在 PHP5 中多了一系列新接口,在 HaoHappy 翻译的系列文章中,你可以了解到他们的应用,同时这些接口和一些实现的 Class 被归为 Standa...

ArrayAccess接口介绍

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

下面是 ArrayAccess 的定义:

  1. interface ArrayAccess 
  2. boolean offsetExists($index) 
  3. mixed offsetGet($index) 
  4. void offsetSet($index, $newvalue) 
  5. void offsetUnset($index) 

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

如以下代码:

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

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

分享到:
PHP中修改memory_limit限制多种方法 - ph...
PHP中修改memory_limit限制多种方法 memory_limit这个参数我想大家看英文就知道是最大内存的问题,默认的一般是128MB如果想更大我们就得自己动手处理了,下面来看几种解决方法。 memory_limit应当设为多大? 这个完全依附于你的应用的请求,比如Wordpress,运行起核心代码须要32MB,Drupal 6则...
PHP编译问题 - php高级应用
PHP编译问题 这章节搜集了很多编译时会产生的错误情况。 1. 我用匿名CVS得到最新版的源代码包,但没有配置脚本文件!  你必须安装 GNU autoconf 包,这样可以从 configure.in生成配置脚本文件. 只要运行在CVS服务器得到源代码的顶级目录下的 ./buildconf。 (注意, 除非你运行configure --e...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……