ArrayAccess像访问数组那样访问对象

2016-10-13

只需要实现几个方法就能像数组那样访问Object

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class ArrObj implements ArrayAccess
{
private $arr = ['microsoft', 'apple', 'nokia', 'sony'];
public function offsetExists($offset)
{
return array_key_exists($offset, $this->arr);
}
public function offsetGet($offset)
{
return $this->arr[$offset];
}
public function offsetSet($offset, $value)
{
if(is_null($offset)){
$this->arr[] = $value;//解决$obj[] = value的问题
}else{
$this->arr[$offset] = $value;
}
}
public function offsetUnset($offset)
{
unset($this->arr[$offset]);
}
}

注意这里offsetSet是为了防止$obj[] = value产生的空异常的问题。