温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在PHP中使用ArrayAccess实现一个数组式访问接口

发布时间:2021-04-01 17:39:49 来源:亿速云 阅读:232 作者:Leah 栏目:开发技术

怎么在PHP中使用ArrayAccess实现一个数组式访问接口?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

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 ) }

例子说明:

<?php /** * ArrayAndObjectAccess * 该类允许以数组或对象的方式进行访问 * * @author 疯狂老司机 */ class ArrayAndObjectAccess implements ArrayAccess {   /**    * 定义一个数组用于保存数据    *    * @access private    * @var array    */   private $data = [];   /**    * 以对象方式访问数组中的数据    *    * @access public    * @param string 数组元素键名    */   public function __get($key) {     return $this->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实现一个数组式访问接口问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI