像访问数组一样访问对象

前言

通过实现php提供的 ArrayAccess 接口,可以方便的实现像操作数组一样访问对象

ArrayAccess接口

php提供的接口,我们看一下要实现的内容

1
2
3
4
5
6
7
8
9
10
11
<?php
ArrayAccess {
// isset判断的时候自动调用
abstract public boolean offsetExists ( mixed $offset )
// 获取数组数据的时候自动调用
abstract public mixed offsetGet ( mixed $offset )
// 添加数据的时候自动调用
abstract public void offsetSet ( mixed $offset , mixed $value )
// unset的时候自动调用
abstract public void offsetUnset ( mixed $offset )
}

实现接口(例子)

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
/**
* Created by PhpStorm.
* User: wangHan
* Date: 2016/10/21
* Time: 14:07
*/
class Human implements ArrayAccess
{
private $elements;
public function __construct()
{
$this->elements = [
"boy" => "male",
"girl" => "female"
];
}
/**
* isset判断的时候调用
* @param {[type]} $offset key键
*/
public function offsetExists($offset)
{
// TODO: Implement offsetExists() method.
return isset($this->elements[$offset]);
}
/**
* 获取值的时候调用
* @param {[type]} $offset key键
*/
public function offsetGet($offset)
{
// TODO: Implement offsetGet() method.
return $this->elements[$offset];
}
/**
* 存放值的时候调用
* @param {[type]} $offset key键
*/
public function offsetSet($offset, $value)
{
// TODO: Implement offsetSet() method.
$this->elements[$offset] = $value;
}
/**
* unset的时候调用
* @param {[type]} $offset key键
*/
public function offsetUnset($offset)
{
// TODO: Implement offsetUnset() method.
unset($this->elements[$offset]);
}
}
$human = new Human();
$human['people'] = "boyAndGirl"; // 自动调用offsetSet
if(isset($human['people'])) { // 自动调用offsetExists
echo $human['boy'];// 自动调用offsetGet
echo '<br />';
unset($human['boy']);// 自动调用offsetUnset
var_dump($human['boy']);
}
// // 输出结果 male null

参考

echo-ding wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
坚持原创技术分享,您的支持将鼓励我继续创作!