php使用数组语法访问对象

本文介绍如何通过实现 PHP 的 ArrayAccess 接口使对象能够像数组一样被访问和操作。详细解释了 offsetExists、offsetGet、offsetSet 和 offsetUnset 四个方法的作用及其触发时机。

  有一个对象,不过希望能用数组的语法来读写数据,可以使用 实现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
*/

  

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值