首页 | 联系我们 | 叶凡网络官方QQ群:323842844
游客,欢迎您! 请登录 免费注册 忘记密码
您所在的位置:首页 > 开发语言 > PHP开发 > 正文

ArrayAccess接口介绍

作者:cocomyyz 来源: 日期:2013-10-19 10:19:37 人气:0 加入收藏 评论:0 标签: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。我们换种方式?

如以下代码:


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

本文网址:http://www.mingyangnet.com/html/php/509.html
读完这篇文章后,您心情如何?
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
  • 0
更多>>网友评论
发表评论
编辑推荐
  • 没有资料