本文实例讲述了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 )

}

例子说明:

/**

* 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 arrayaccess 二维,PHP数组式访问接口ArrayAccess用法分析相关推荐

  1. PHP数组式访问接口ArrayAccess

    为什么80%的码农都做不了架构师?>>>    PHP数组式访问接口ArrayAccess技术 maybe yes 发表于2015-04-23 22:34 原文链接 : http:/ ...

  2. php arrayaccess 二维,php的ArrayAccess(数组式访问接口)

    本文中的php版本:PHP Version 7.2.5 php中内置了6个常用的预定义接口,实现某些特定的能力.其中最常用的就是 ArrayAccess 了,像ThinkPHP.yii2.Larave ...

  3. 【C语言】动态分配二维字符串数组

    动态分配一个二维字符串数组 (1) 分配可能不连续的内存 申请 char**pps8Output = (char **) malloc(n * sizeof(char *)); 对于pps8Outpu ...

  4. 返回一个二维整数数组中的最大的子数组和

    一.题目: 1.输入一个二维整形数组,数组里有正数有负数. 2.二维数组中连续的一个子矩阵组成一个子数组. 3.求所有子数组的和的最大值. 二.设计思想: .定义一个二维数组,使用二重循环对其进行赋值 ...

  5. numpy使用[]语法索引二维numpy数组中指定行列位置的数值内容(access value at certain row and column in numpy array)

    numpy使用[]语法索引二维numpy数组中指定行列位置的数值内容(access value at certain row and column in numpy array) 目录

  6. numpy使用[]语法索引二维numpy数组中指定指定行之后所有数据行的数值内容(accessing rows in numpy array after specifc row)

    numpy使用[]语法索引二维numpy数组中指定指定行之后所有数据行的数值内容(accessing rows in numpy array after specifc row) 目录

  7. numpy使用[]语法索引二维numpy数组中指定数据行的数值内容(accessing the specific row in numpy array)

    numpy使用[]语法索引二维numpy数组中指定数据行的数值内容(accessing the specific row in numpy array) 目录 numpy使用[]语法索引二维numpy ...

  8. numpy使用[]语法索引二维numpy数组中指定范围数据行的数值内容(accessing rows in numpy array with specific range)

    numpy使用[]语法索引二维numpy数组中指定范围数据行的数值内容(accessing rows in numpy array with specific range) 目录

  9. numpy使用[]语法索引二维numpy数组中指定指定行之前所有数据行的数值内容(accessing rows in numpy array before specifc row)

    numpy使用[]语法索引二维numpy数组中指定指定行之前所有数据行的数值内容(accessing rows in numpy array before specifc row) 目录

最新文章

  1. CATransition
  2. synchronized(二)
  3. ligerui layout拖动中间分隔条宽度后,重新调整两边控件的宽度
  4. HDU - 2586 How far away ?(LCA)
  5. wap网游php源码,wap 文字游戏
  6. “飞客”蠕虫 执子之手 与子携老
  7. 松下plc编程软件_松下PLC编程软件Control FPWIN Pro7.3.2.0
  8. 在电脑上如何快速制作一寸照片?在线一键制作工具推荐给你
  9. 计算机专业论文要怎么写,计算机专业本科生论文摘要怎么写 计算机专业本科生论文摘要范文参考...
  10. A simple test
  11. probuilder_使用ProBuilder自定义快照原型资产
  12. chrome如何手动同步?
  13. “燕云十六将”之Lorna(14)
  14. 软件测试周刊(第39期):我们必须全力以赴,同时又不抱持任何希望。
  15. java堆和栈分别存什么类型_栈、堆、方法区分别存储什么内容
  16. 测试 zxdfasd阿斯顿水电费健康sdgfsdgsg的发oip挥加快了地方噶是的
  17. batch_size 大小的设定,对训练的影响
  18. 简单的认识dll授权加密
  19. Kali安装peda
  20. 信息与计算科学有哪些SCI期刊推荐? - 易智编译EaseEditing

热门文章

  1. AppStore新应用上传指南
  2. Android Screen
  3. 备忘:SharePoint默认的欢迎WebPart中超链接样式
  4. 50 - 算法- LeetCode 104 -二叉树
  5. java moneyutils_java中每月等额与先息后本计算
  6. SPSS数据分析之列联分析与卡方检验、方差分析与LSD方法【操作详解】
  7. 8、不与最大值相同的数字之和
  8. 02:陶陶摘苹果【一维数组】
  9. 帝国cms模板嵌入php,帝国cms模板中php调用信息的例子
  10. Python+ZeroMQ使用REQ/REP模式快速实现消息收发