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个人网站架设连环讲(二)
Oct 09 PHP
PHP 截取字符串 分别适合GB2312和UTF8编码情况
Feb 12 PHP
PHP学习笔记 IIS7下安装配置php环境
Oct 29 PHP
mysqli_set_charset和SET NAMES使用抉择及优劣分析
Jan 13 PHP
php实现执行某一操作时弹出确认、取消对话框
Dec 30 PHP
使用PHP接受文件并获得其后缀名的方法
Aug 05 PHP
Yii2简单实现多语言配置的方法
Jul 23 PHP
PHP session会话操作技巧小结
Sep 27 PHP
浅谈PHP中的错误处理和异常处理
Feb 04 PHP
PHP实现类似于C语言的文件读取及解析功能
Sep 01 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
discuz论坛更换域名,详细文件修改步骤
Dec 09 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
CI框架安全类Security.php源码分析
2014/11/04 PHP
JQuery获取各种宽度、高度(format函数)实例
2013/03/04 Javascript
div当滚动到页面顶部的时候固定在顶部实例代码
2013/05/27 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
javascript获取系统当前时间的方法
2015/11/19 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
2016/10/11 Javascript
微信js-sdk预览图片接口及从拍照或手机相册中选图接口用法示例
2016/10/13 Javascript
Bootstrap Tooltip显示换行和左对齐的解决方案
2017/10/11 Javascript
Node.js readline 逐行读取、写入文件内容的示例
2018/03/01 Javascript
JavaScript中Array方法你该知道的正确打开方法
2018/09/11 Javascript
简化版的vue-router实现思路详解
2018/10/19 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
Cordova(ionic)项目实现双击返回键退出应用
2019/09/17 Javascript
解决Can't find variable: SockJS vue项目的问题
2020/09/22 Javascript
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
Python 25行代码实现的RSA算法详解
2018/04/10 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
python五子棋游戏的设计与实现
2019/06/18 Python
Python绘制热力图示例
2019/09/27 Python
python中resample函数实现重采样和降采样代码
2020/02/25 Python
Python3创建Django项目的几种方法(3种)
2020/06/03 Python
英国口碑最好的的维他命胶囊品牌:Myvitamins(有中文站)
2016/12/03 全球购物
英国日常交易网站:Wowcher
2018/09/04 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
锐步英国官网:Reebok英国
2019/11/29 全球购物
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
八项规定对照检查材料
2014/08/31 职场文书
高三毕业评语
2014/12/31 职场文书
涨价通知
2015/04/23 职场文书
小区物业管理2015年度工作总结
2015/10/22 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
导游词之西安骊山
2019/12/03 职场文书