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 相关文章推荐
一个阿拉伯数字转中文数字的函数
Oct 09 PHP
PHP脚本的10个技巧(3)
Oct 09 PHP
站长助手-网站web在线管理程序 v1.0 下载
May 12 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
Jun 12 PHP
PHP实现删除非站内外部链接实例代码
Jun 17 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
Nov 18 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
Feb 23 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
Oct 18 PHP
php+mysql实现简单登录注册修改密码网页
Nov 30 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
PHP实现将base64编码字符串转换成图片示例
Jun 22 PHP
PHP实现基本留言板功能原理与步骤详解
Mar 26 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
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
php判断输入是否是纯数字,英文,汉字的方法
2015/03/05 PHP
PHP实现数组array转换成xml的方法
2016/07/19 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
基于php流程控制语句和循环控制语句(讲解)
2017/10/23 PHP
TP5框架页面跳转样式操作示例
2020/04/05 PHP
php与js的区别是什么
2013/08/05 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
javascript中FOREACH数组方法使用示例
2016/03/01 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
微信小程序云开发获取文件夹下所有文件(推荐)
2019/11/14 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
[45:34]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.18
2020/12/19 DOTA
Python 可爱的大小写
2008/09/06 Python
web.py中调用文件夹内模板的方法
2014/08/26 Python
使用Python绘制图表大全总结
2017/02/11 Python
Python三级菜单的实例
2017/09/13 Python
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
python将文本中的空格替换为换行的方法
2018/03/19 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
浅谈Python编程中3个常用的数据结构和算法
2019/04/30 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
tensorflow 分类损失函数使用小记
2020/02/18 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
党建示范点实施方案
2014/03/12 职场文书
项目建议书范文
2014/05/12 职场文书
社区工作者演讲稿
2014/05/23 职场文书
李敖北大演讲稿
2014/05/24 职场文书
中国梦演讲稿范文
2014/08/28 职场文书
班级活动总结格式
2014/08/30 职场文书
抗洪救灾标语
2014/10/08 职场文书
党纪处分决定书
2015/06/24 职场文书
六年级作文之家庭作文
2019/12/12 职场文书
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js