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

 

posted @   六只小猫  阅读(296)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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 热点速览」
点击右上角即可分享
微信分享提示