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 相关文章推荐
使用无限生命期Session的方法
Oct 09 PHP
PHP session有效期session.gc_maxlifetime
Apr 20 PHP
很让人受教的 提高php代码质量36计
Sep 05 PHP
PHP开发框架kohana中处理ajax请求的例子
Jul 14 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
Zend Framework教程之Resource Autoloading用法实例
Mar 08 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
Dec 07 PHP
PHP _construct()函数讲解
Feb 03 PHP
浅析PHP7 的垃圾回收机制
Sep 06 PHP
Laravel框架实现即点即改功能的方法分析
Oct 31 PHP
laravel框架邮箱认证实现方法详解
Nov 22 PHP
php + ajax 实现的写入数据库操作简单示例
May 16 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
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
超小PHP小马小结(方便查找后门的朋友)
2012/05/05 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
PHP定时执行任务实现方法详解(Timer)
2015/07/30 PHP
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
jQuery取得iframe中元素的常用方法详解
2016/01/14 Javascript
laypage分页控件使用实例详解
2016/05/19 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
2017/06/07 jQuery
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
JS实现的新闻列表自动滚动效果示例
2019/01/30 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
微信小程序scroll-view隐藏滚动条的方法详解
2020/03/25 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
Python爬虫实例爬取网站搞笑段子
2017/11/08 Python
Python金融数据可视化汇总
2017/11/17 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
详解Python_shutil模块
2019/03/15 Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
2019/04/25 Python
Python TestCase中的断言方法介绍
2019/05/02 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
python七种方法判断字符串是否包含子串
2020/08/18 Python
在购买印度民族服饰:Soch
2020/09/15 全球购物
中文专业毕业生自荐书范文
2014/01/04 职场文书
自我鉴定三原则
2014/01/13 职场文书
运动会稿件200字
2014/02/07 职场文书
2014两会优秀的心得体会范文
2014/03/17 职场文书
2014五一国际劳动节活动总结范文
2014/04/14 职场文书
清洁工个人工作总结
2015/03/05 职场文书
Spring Data JPA框架的核心概念和Repository接口
2022/04/28 Java/Android