介绍
ArrayAccess
接口是PHP5中新添加的一个接口,其功能是使类可以像PHP中的数组一样操作。有点类似于.net平台的index操作。其接口很简单,就四个函数:
- interface ArrayAccess
- {
- public function offsetGet($index);
- public function offsetSet($index, $value);
- public function offsetExists($index);
- public function offsetUnset($index);
- }
offsetGet
是数组的取值操作;offsetSet
是数组的赋值操作;offsetExists
判断值是否存在,用于isset
语句;offsetUnset
删除操作,用于unset
语句。
实现
- class Book1 implements ArrayAccess
- {
- private $name;
- private $author;
- public function offsetGet($index)
- { return $this-<$index[$index]; }
- public function offsetSet($index, $value)
- { $this-<$index = $value; }
- public function offsetExists($index)
- { return isset($this-<$index); }
- public function offsetUnset($index)
- { unset($this-<$index); }
- }
- $book = new Book1();
- $book['name'] = 'PHP';
- $book['author'] = 'caixw';
- print_r($book);
- class Book2 implements ArrayAccess
- {
- private $_book;
- public function __construct(array &$book)
- { $this-<_book = $book; }
- public function offsetGet($index)
- { return $this-<_book[$index]; }
- public function offsetSet($index, $value)
- { throw new exception('不允许修改!'); }
- public function offsetExists($index)
- { return isset($this-<_book[$index]); }
- public function offsetUnset($index)
- {}
- }
- $books = array();
- $rows = mysql_query("SELECT * FROM books")-<fetchAll();
- foreach($rows as $row)
- {
- $books[] = new Book2($row);
- }
- $books[1]['author'] = 'author'; // 抛出异常
- unset($books[1]['author']); // 不会发生任何操作
- print_r($book);
ArrayObject
- class Book3 extends ArrayObject
- {
- public function __construct(array &$array)
- {
- // todo
- parent::__construct($array);
- }
- public function offsetSet($index, $value)
- { throw new exception(''); }
- public function offsetUnset($index)
- {}
- }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述