原文地址这里写链接内容
如果想让对象使用起来像一个PHP数组,那么我们需要实现ArrayAccess接口
ArrayAccess是一个interface,实现这个interface,必须要实现以下几个方法:
/**
* 标识一个元素是否定义
* @param offset
*/
abstract public function offsetExists ($offset) {}
/**
* 返回一个元素的值
* @param offset
*/
abstract public function offsetGet ($offset) {}
/**
* 为一个元素的赋值
* @param offset
* @param value
*/
abstract public function offsetSet ($offset, $value) {}
/**
* 删除一个元素
* @param offset
*/
abstract public function offsetUnset ($offset) {}
示例代码:
class Test implements ArrayAccess {
private $elements;
public function offsetExists($offset){
return isset($this->elements[$offset]);
}
public function offsetSet($offset, $value){
$this->elements[$offset] = $value;
}
public function offsetGet($offset){
return $this->elements[$offset];
}
public function offsetUnset($offset){
unset($this->elements[$offset]);
}
}
$test = new Test();
$test['test'] = 'test';//自动调用offsetSet
if(isset($test['test']))//自动调用offsetExists
{
echo $test['test'];//自动调用offsetGet
echo '<br />';
unset($test['test']);//自动调用offsetUnset
var_dump($test['test']);
}
运行输出:
test
NULL