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动态生成JavaScript代码
Mar 09 PHP
PHP 学习路线与时间表
Feb 21 PHP
php 使用post,get的一种简洁方式
Apr 25 PHP
利用Memcached在php下实现session机制 替换PHP的原生session支持
Aug 21 PHP
PHP 命名空间实例说明
Jan 27 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
Jun 09 PHP
yii实现级联下拉菜单的方法
Jul 31 PHP
php无限分类使用concat如何实现
Nov 05 PHP
php防止CC攻击代码 php防止网页频繁刷新
Dec 21 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
Mar 18 PHP
关于Laravel-admin的基础用法总结和自定义model详解
Oct 08 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 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
PHP学习之正则表达式
2011/04/17 PHP
采用thinkphp自带方法生成静态html文件详解
2014/06/13 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
WordPress中&quot;无法将上传的文件移动至&quot;错误的解决方法
2015/07/01 PHP
PHP 实现从数据库导出到.csv文件方法
2017/07/06 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
JS 自定义函数缺省值的设置方法
2010/05/05 Javascript
JS获取IP、MAC和主机名的五种方法
2013/11/14 Javascript
js中split函数的使用方法说明
2013/12/26 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
2017/05/02 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
vue2.0 datepicker使用方法
2018/02/04 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
在vue项目中引用Iview的方法
2018/09/14 Javascript
JavaScript forEach中return失效问题解决方案
2020/06/01 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
Python三元运算实现方法
2015/01/12 Python
详解Python的Lambda函数与排序
2016/10/25 Python
Django学习笔记之ORM基础教程
2018/03/27 Python
python进行两个表格对比的方法
2018/06/27 Python
python 字典中取值的两种方法小结
2018/08/02 Python
Python turtle库绘制菱形的3种方式小结
2019/11/23 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
2020/02/13 Python
英国著名的药妆网站:Escentual
2016/07/29 全球购物
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
Ray-Ban雷朋太阳眼镜英国官网:Ray-Ban UK
2019/11/23 全球购物
高考自主招生自荐信
2013/10/20 职场文书
《乞巧》教学反思
2014/02/27 职场文书
三分钟演讲稿范文
2014/04/24 职场文书
财务工作犯错检讨书
2014/10/07 职场文书
运动会广播稿20字
2015/08/19 职场文书
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
2021/06/07 Python