好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

ArrayAccess接口介绍 - php高级应用

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,也许你会问,这个和使用数组有什么区别呢?目的是没有区别的,但最大的区别在于封装,最基本的工作就是封装,而封装能有效将变化置于内部,也就是说,当配置信息不再保存在一个 PHP 数组中的时候,是的,应用代码无需任何改变,可能要做的,仅仅是为配置方案添加一个新的策略(Strategy)。

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

查看更多关于ArrayAccess接口介绍 - php高级应用的详细内容...

  阅读:33次