ArrayAccess简介:提供像访问数组一样访问对象的能力的接口。
//接口摘要:↓
ArrayAccess {
/* 方法 */
abstract public boolean offsetExists ( mixed $offset )
abstract public mixed offsetGet ( mixed $offset )
abstract public void offsetSet ( mixed $offset , mixed $value )
abstract public void offsetUnset ( mixed $offset )
}
/**
* Class Foo 使用数组语法访问对象
* 用数组的语法来读写数据,使用SPL的ArrayAccess接口。
*
* offsetExists (指定一个元素是否已定义)
* offsetGet (获取一个元素的值)
* offsetSet (将元素设置为一个新值)
* offsetUnset (删除一个元素及值)
*
*/
class Foo implements ArrayAccess{
protected $arrays = array();
public function __construct($arr)
{
// 初始化数组
$this->arrays = $arr;
}
// isset元素时触发该方法
public function offsetExists($offset)
{
return isset($this->arrays[$offset]);
}
// 获取一个数组元素时触发
public function offsetGet($offset)
{
return $this->arrays[$offset];
}
// 设置一个数组元素时触发
public function offsetSet($offset, $value)
{
if(is_null($offset)) {
$this->arrays[] = $value;
}else{
$this->arrays[$offset] = $value;
}
}
// unset一个数组元素时触发
public function offsetUnset($offset)
{
unset($this->arrays[$offset]);
}
}
$arr = array('张三','李四','王五');
$Foo = new Foo($arr); // 初始化并传递数组
isset($Foo[1]); // 检测数组元素是否否在 自动调用offsetExists
echo $Foo[1]; // 获取数组元素 自动调用offsetGet
$Foo[] = 'new element'; // 新增数组元素 自动调用offsetSet
unset($Foo[1]); // 删除数组元素 自动调用offsetUnset
相关文档:
http://php.net/manual/zh/class.arrayaccess.php
http://moell.cn/article/29