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 相关文章推荐
使用NetBeans + Xdebug调试PHP程序的方法
Apr 12 PHP
php学习笔记 PHP面向对象的程序设计
Jun 13 PHP
php计算当前程序执行时间示例
Apr 24 PHP
php简单统计字符串单词数量的方法
Jun 19 PHP
Thinkphp关闭缓存的方法
Jun 26 PHP
php制作的简单验证码识别代码
Jan 26 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
php实现的表单验证类完整示例
Aug 13 PHP
redis+php实现微博(二)发布与关注功能详解
Sep 23 PHP
解决laravel中日志权限莫名变成了root的问题
Oct 17 PHP
详解php反序列化
Jun 10 PHP
Yii实现微信公众号场景二维码的方法实例
Aug 30 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
编译问题
2006/10/09 PHP
php 多关键字 高亮显示实现代码
2012/04/23 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
JavaScript CSS菜单功能 改进版
2008/12/20 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
javascript模块化是什么及其优缺点介绍
2013/09/02 Javascript
JS中window.open全屏命令解析及使用示例
2013/12/11 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
Javascript设计模式之观察者模式的多个实现版本实例
2015/03/03 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
js实现一个猜数字游戏
2017/03/31 Javascript
jQuery图片缩放插件smartZoom使用实例详解
2017/08/25 jQuery
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
mock.js实现模拟生成假数据功能示例
2019/01/15 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
2019/04/25 Javascript
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
基于canvas实现手写签名(vue)
2020/05/21 Javascript
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
Python中的map()函数和reduce()函数的用法
2015/04/27 Python
Python中关于使用模块的基础知识
2015/05/24 Python
python3.5仿微软计算器程序
2020/03/30 Python
Python实现的十进制小数与二进制小数相互转换功能
2017/10/12 Python
tensorflow 打印内存中的变量方法
2018/07/30 Python
python实现归并排序算法
2018/11/22 Python
python dir函数快速掌握用法技巧
2020/12/09 Python
丝芙兰墨西哥官网:Sephora墨西哥
2020/05/30 全球购物
《月光启蒙》教学反思
2014/03/01 职场文书
实习生工作证明范本
2014/09/14 职场文书
高中生毕业评语
2014/12/30 职场文书
《三国志》赏析
2019/08/27 职场文书
apache虚拟主机配置的三种方式(小结)
2022/07/23 Servers