• 技术文章 >后端开发 >php教程

    PHP - ArrayAccess接口详解

    2016-07-29 08:55:52原创1006
    PHP ArrayAccess接口又叫数组式访问接口,该接口的作用是提供像访问数组一样访问对象的能力。

    接口摘要如下:

    ArrayAccess {
        // 获取一个偏移位置的值
        abstract public mixed offsetGet ( mixed $offset )
        // 设置一个偏移位置的值
        abstract public void offsetSet ( mixed $offset , mixed $value )
        // 检查一个偏移位置是否存在
        abstract public boolean offsetExists ( mixed $offset )
        // 复位一个偏移位置的值
        abstract public void offsetUnset ( mixed $offset )
    }

    例子说明:

    data[$key];
        }
    
        /**
         * 以对象方式添加一个数组元素
         *
         * @access public 
         * @param string 数组元素键名
         * @param mixed  数组元素值
         * @return mixed
         */
        public function __set($key,$value) {
            $this->data[$key] = $value;
        }
    
        /**
         * 以对象方式判断数组元素是否设置
         *
         * @access public
         * @param 数组元素键名
         * @return boolean
         */
        public function __isset($key) {
            return isset($this->data[$key]);
        }
    
        /**
         * 以对象方式删除一个数组元素
         *
         * @access public
         * @param 数组元素键名
         */
        public function __unset($key) {
            unset($this->data[$key]);
        }
    
        /**
         * 以数组方式向data数组添加一个元素
         *
         * @access public
         * @abstracting ArrayAccess
         * @param string 偏移位置
         * @param mixed  元素值
         */
        public function offsetSet($offset,$value) {
            if (is_null($offset)) {
                $this->data[] = $value;
            } else {
                $this->data[$offset] = $value;
            }
        }
    
        /**
         * 以数组方式获取data数组指定位置元素
         *
         * @access public   
         * @abstracting ArrayAccess       
         * @param 偏移位置
         * @return mixed
         */
        public function offsetGet($offset) {
            return $this->offsetExists($offset) ? $this->data[$offset] : null;
        }
    
        /**
         * 以数组方式判断偏移位置元素是否设置
         *
         * @access public
         * @abstracting ArrayAccess
         * @param 偏移位置
         * @return boolean
         */
        public function offsetExists($offset) {
            return isset($this->data[$offset]);
        }
    
        /**
         * 以数组方式删除data数组指定位置元素
         *
         * @access public
         * @abstracting ArrayAccess     
         * @param 偏移位置
         */
        public function offsetUnset($offset) {
            if ($this->offsetExists($offset)) {
                unset($this->data[$offset]);
            }
        }
    
    }
    
    $animal = new ArrayAndObjectAccess();
    
    $animal->dog = 'dog'; // 调用ArrayAndObjectAccess::__set
    $animal['pig'] = 'pig'; // 调用ArrayAndObjectAccess::offsetSet
    var_dump(isset($animal->dog)); // 调用ArrayAndObjectAccess::__isset
    var_dump(isset($animal['pig'])); // 调用ArrayAndObjectAccess::offsetExists
    var_dump($animal->pig); // 调用ArrayAndObjectAccess::__get
    var_dump($animal['dog']); // 调用ArrayAndObjectAccess::offsetGet
    unset($animal['dog']); // 调用ArrayAndObjectAccess::offsetUnset
    unset($animal->pig); // 调用ArrayAndObjectAccess::__unset
    var_dump($animal['pig']); // 调用ArrayAndObjectAccess::offsetGet
    var_dump($animal->dog); // 调用ArrayAndObjectAccess::__get
    
    ?>

    以上输出:

    boolean true
    boolean true
    string 'pig' (length=3)
    string 'dog' (length=3)
    null
    null

    以上就介绍了PHP - ArrayAccess接口详解,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:你知道Nginx的七大优势吗? 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 聊聊php百万数据怎么写入csv• 浅析PHP中的类自动加载相关文件• 系统讲解PHP缓存技术• 一文理解和实现现代PHP框架里的IOC容器• PHP文件上传后缀名与文件类型对照表整理_PHP教程
    1/1

    PHP中文网