如何以像数组一样的方式使用一个类

在php中,有时候我们想像数组一样使用类来进行增删改查,那么正确的方法应该是让相应类实现ArrayAccess接口,重写ArrayAccess的接口方法。【内容参考php5权威编程】

正常使用

$obj = new TestArrayTypeObj;
echo $obj->name;

想要的效果

$obj = new TestArrayTypeObj;
echo $obj['name'];

具体实现

需要实现的四个接口方法分别是

  • offsetExists判断索引是否存在
  • offsetGet取出索引对应的值
  • offsetSet设置索引对应值
  • offsetUnset删除索引
class TestArrayTypeObj implements ArrayAccess{

    private $arr = ['name'=>'yemin', 'age'=>24];

    function offsetExists($name)
    {
        return array_key_exists($name, $this->arr);
    }

    function offsetGet($name)
    {
        return $this->arr[$name];
    }

    function offsetSet($name, $value)
    {
        return $this->arr[$name] = $value;
    }

    function offsetUnset($name)
    {
        unset($this->arr[$name]);
    }
}

当然上述的方法没有进行安全检验,有需要的时候可以再补充,另外内部的$arr大家可以通过编写类方法或者构造函数将其变成大家需要的数据,或则操作句柄(如数据库操作类/文件)进行对应的增删改查操作;

你可能感兴趣的:(如何以像数组一样的方式使用一个类)