PHP数组式访问接口ArrayAccess用法分析


Posted in PHP onDecember 28, 2017

本文实例讲述了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程序设计有所帮助。

PHP 相关文章推荐
用PHP和ACCESS写聊天室(三)
Oct 09 PHP
PHP实现邮件群发的源码
Jun 18 PHP
使用PHP获取当前url路径的函数以及服务器变量
Jun 29 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
php模拟登陆的实现方法分析
Jan 09 PHP
php对关联数组循环遍历的实现方法
Mar 13 PHP
php文件缓存类用法实例分析
Apr 22 PHP
解读PHP中的垃圾回收机制
Aug 10 PHP
php实现简单的上传进度条
Nov 17 PHP
PHP中in_array函数使用的问题与解决办法
Sep 11 PHP
CI框架实现创建自定义类库的方法
Dec 25 PHP
PHP的mysqli_rollback()函数讲解
Jan 23 PHP
PHP获取数组中指定的一列实例
Dec 27 #PHP
快速解决PHP调用Word组件DCOM权限的问题
Dec 27 #PHP
详解Yaf框架PHPUnit集成测试方法
Dec 27 #PHP
Laravel中使用Queue的最基本操作教程
Dec 27 #PHP
php获取ajax的headers方法与内容实例
Dec 27 #PHP
PHP实现求连续子数组最大和问题2种解决方法
Dec 26 #PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
Dec 26 #PHP
You might like
咖啡历史、消费和行业趋势
2021/03/03 咖啡文化
如何给phpadmin一个保护
2006/10/09 PHP
有关PHP中MVC的开发经验分享
2012/05/17 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
php启用sphinx全文搜索的实现方法
2014/12/24 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
PHP html_entity_decode()函数讲解
2019/02/25 PHP
thinkphp框架表单数组实现图片批量上传功能示例
2020/04/04 PHP
用jquery实现下拉菜单效果的代码
2010/07/25 Javascript
javascript 45种缓动效果 非常酷
2011/06/28 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
jQuery+CSS实现简单切换菜单示例
2016/07/27 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
layer.open 按钮的点击事件关闭方法
2018/08/17 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
微信自定义分享链接信息(标题,图片和内容)实现过程详解
2019/09/04 Javascript
Vue中watch、computed、updated三者的区别及用法
2020/07/27 Javascript
vue 子组件和父组件传值的示例
2020/09/11 Javascript
python模拟鼠标拖动操作的方法
2015/03/11 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
Android 兼容性问题:java.lang.UnsupportedOperationException解决办法
2017/03/19 Python
windows下python连接oracle数据库
2017/06/07 Python
tensorflow 1.0用CNN进行图像分类
2018/04/15 Python
flask-restful使用总结
2018/12/04 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
python实现生成Word、docx文件的方法分析
2019/08/30 Python
美国手工艺品市场的领导者:Annie’s
2019/04/04 全球购物
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
Jones New York官网:美国女装品牌,受白领女性欢迎
2019/11/26 全球购物
马歇尔耳机官网:Marshall Headphones
2020/02/04 全球购物
妇产科护士自我鉴定
2013/10/15 职场文书
水污染治理工程专业求职信
2014/06/14 职场文书
2014年民主评议党员个人总结
2014/09/24 职场文书
2015年新教师个人工作总结
2015/10/14 职场文书
心得体会该怎么写呢?
2019/06/27 职场文书