zoukankan      html  css  js  c++  java
  • php使用数组语法访问对象

      有一个对象,不过希望能用数组的语法来读写数据,可以使用 实现SPL的ArrayAccess接口来解决。

      使用场景:加载配置文件类。larvel框架加载配置文件就这利用数组来操作对象。

      

      数组式访问Object ,必须实现下面4个方法

    /*
    * offsetExists (指定一个元素是否已定义)
    * offsetGet (获取一个元素的值)
    * offsetSet (将元素设置为一个新值)
    * offsetUnset (删除一个元素及值)
    */
     1 class FakeArray implements ArrayAccess {
     2 
     3     private $elements;
     4 
     5     public function __consturct(){
     6         //初始化一个新数组
     7         $this->elements = [];
     8     }
     9 
    10     //isset 时候触发
    11     public function offsetExists($offset)
    12     {
    13         return isset($this->elements[$offset]);
    14     }
    15 
    16     //获取一个元素时触发
    17     public function offsetGet($offset)
    18     {
    19         return $this->elements[$offset];
    20     }
    21 
    22     //设置一个元素时触发
    23     public function offsetSet($offset, $value)
    24     {
    25         return $this->elements[$offset] = $value;
    26     }
    27 
    28     //unset时触发
    29     public function offsetUnset($offset)
    30     {
    31         unset($this->elements[$offset]);
    32     }
    33 }
    34 
    35 $arr = new FakeArray();
    36 
    37 $arr['animal'] = 'rabbit';
    38 print_r($arr);
    39 
    40 if (isset($arr['animal']) && $arr['animal']== 'rabbit')
    41         unset($arr['animal']);

      从上面代码可以看到:

     每一个操作会调用一个方法
    /*
    * $arr['animal'] = 'rabbit' 触发offsetSet
    * isset($arr['animal']) 触发offsetExists
    * $arr['animal'] == 'rabbit' 触发offsetGet
    * unset($arr['animal']) 触发offsetUnset
    */

      

     
  • 相关阅读:
    省选后蛤蛤纪事
    About me
    第一篇blog
    震惊!山东一高中生学习锯木板,原因竟是...
    斯特林数相关
    省选后数学学习
    SDOI 2020游记
    奶茶推荐
    Goodbye 2019
    golang 并发锁的陷阱
  • 原文地址:https://www.cnblogs.com/loveyouyou616/p/5533625.html
Copyright © 2011-2022 走看看