小白兔晒黑了

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

1 何为预定义

php中的预定义是指的是被视为全局可用的内置常量、变量、函数、类、接口,这些内容不需要特别的引入或申明,本身就存在于php语言中。

php 预定义类目录:https://www.php.net/manual/zh/reserved.classes.php

2  ArrayAccess接口 简介

ArrayAccess接口可以让你在操纵对象中的数据时,使用与操纵数组中的数据相同的一套约定。

https://www.php.net/manual/zh/class.arrayaccess.php

 

这样做的好处是:能够充分利用面向对象设计的好处,例如使用基于类的继承,或者在对象(数组)中实现额外的方法;

 

要实现ArrayAccess接口,必须实现四个方法:

public offsetExists(mixed $offset): bool      用于标识一个元素是否已定义
public offsetGet(mixed $offset): mixed      用于返回一个元素的值
public offsetSet(mixed $offset, mixed $value): void 用于为一个元素设置新值
public offsetUnset(mixed $offset): void 用于删除一个元素和相应的值。
当你用数组的语法操作用ArrayAccess接口的对象中的数据时,会自动调用以上方法。
 
创建一个类 FakeArray 实现这个接口
复制代码
class FakeArray implements ArrayAccess
{
    private $elements;

    public function __construct(){
        $this->elements = array();
    }

    public function offsetExists($offset): bool {
        return isset($this->elements[$offset]);
    }

    public function offsetGet($offset): mixed {
        return isset($this->elements[$offset]) ? $this->elements[$offset] : null;
    }
     public function offsetSet($offset, $value): void {
        if (is_null($offset)) {
            $this->elements[] = $value;
        } else {
            $this->elements[$offset] = $value;
        }
    }
    public function offsetUnset($offset): void {
        unset($this->elements[$offset]);
    }

}
复制代码

 

3 ArrayAccess的使用

就跟使用数组一样方便

复制代码
$array = new FakeArray();
$array['animal'] = '兔子';
if(isset($array['animal'] ) && $array['animal']=='兔子'){
    echo "你有一只兔子了 \n";
}

unset($array['animal']);
if(!isset($array['animal'] )){
    echo "你没有宠物了!\n";
}
复制代码

 

复制代码
class FakeArray2 extends FakeArray
{
    
    public function  givePet()
    {
        echo '你要一只狗吗?';
    }
}

$array = new FakeArray2();
$array->givePet();
$array['animal'] = '狗子';
var_dump($array['animal']);
复制代码

 

posted on   小白兔晒黑了  阅读(67)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2022-09-01 Swoole实战之手撸HttpServer框架 19 ORM整合1 封装
 
点击右上角即可分享
微信分享提示