php8---筑基篇(七)---预定义接口
php预定义接口在框架里面用的比较多,平常工作中写的都是业务模块,很少会去实现这样的接口。常见的预定义接口有:
Traversable(遍历)接口
Iterator(迭代器)接口
IteratorAggregate(聚合迭代器) 接口
ArrayAccess(数组式访问)接口
Serializable (序列化)接口
Closure类
Generator (生成器)
【一】ArrayAccess
一、特点
ArrayAccess 的作用是使得你的对象属性可以像数组一样可以被访问(Interface to provide accessing objects as arrays)。
ArrayAccess 在PHP5中才开始有的,PHP5 中添加了一系列接口,这些接口和实现的 Class 统称为 SPL( Standard PHP Library ,标准PHP类库)。
ArrayAccess 出现的频率非常高,特别是在框架中,比如Laravel、Slim等都会用到,并且用得非常经典
ArrayAccess 这个接口定义了4个必须要实现的方法: { abstract public offsetExists ($offset) //检查偏移位置是否存在 abstract public offsetGet ($offset) //获取一个偏移位置的值 abstract public void offsetSet ($offset ,$value) //设置一个偏移位置的值 abstract public void offsetUnset ($offset) //复位一个偏移位置的值 }
二、举例
class obj implements ArrayAccess { private $container = array(); public function offsetSet($offset, $value) { echo "调用了offsetSet". PHP_EOL; $this->container[$offset] = $value; } public function offsetExists($offset) { echo "调用了offsetExists". PHP_EOL; return isset($this->container[$offset]); } public function offsetUnset($offset) { echo "调用了offsetUnset". PHP_EOL; unset($this->container[$offset]); } public function offsetGet($offset) { echo "调用了offsetGet". PHP_EOL; return isset($this->container[$offset]) ? $this->container[$offset] : null; } } $obj = new obj; $obj['name'] = 'cdf'; //调用了offsetSet var_dump(isset($obj["name"])); //调用了offsetExists var_dump($obj["name"]); //调用了offsetGet unset($obj["two"]); //调用了offsetUnset
三、总结
如果你的类实现了ArrayAccess接口,那么这个类的对象就可以使用$foo['xxx']这种结构了。
$foo['xxx'] 对应调用offsetGet方法。
$foo['xxx'] = 'yyy' 对应调用offsetSet方法。
isset($foo['xxx']) 对应调用offsetExists方法。
unset($foo['xxx']) 对应调用offsetUnset方法。
参考:
https://www.cnblogs.com/foreverno9/p/8640232.htm
https://www.cnblogs.com/zyf-zhaoyafei/p/5228652.html
https://blog.csdn.net/liqihang_dev/article/details/85114374
参考:
https://blog.csdn.net/liqihang_dev/article/details/85114374
https://www.cnblogs.com/foreverno9/p/8640232.html
https://www.cnblogs.com/siqi/p/3670831.html
https://www.cnblogs.com/zyf-zhaoyafei/p/5228652.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」