首页 > 编程语言 >PHP 预定义类 ArrayAccess接口的使用

PHP 预定义类 ArrayAccess接口的使用

时间:2024-09-01 08:52:26浏览次数:5  
标签:义类 elements ArrayAccess animal offset array PHP public

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']);

 

标签:义类,elements,ArrayAccess,animal,offset,array,PHP,public
From: https://www.cnblogs.com/polax/p/18391013

相关文章

  • php htmlspecialchars()、htmlentities()、addslashes() 的区别
    1差别htmlspecialchars()和htmlentities()唯一的差别是对于不认识的编码是否转义。比如,对于西欧编码ISO-8859-1来说,中文字符是“不认识的编码” 2举个例子说明差别2.1转义不认识的编码有差别$str='中文字符';echo"\nhtmlentities会转义:——\n";echohtmlen......
  • ThinkPHP5 5.0.22/5.1.29 远程代码执行漏洞(5-rce)
    漏洞原理该漏洞存在两种利用方式控制器名未过滤导致rce该漏洞出现的原因在于ThinkPHP5框架底层对控制器名过滤不严,从而让攻击者可以通过url调用到ThinkPHP框架内部的敏感函数,进而导致getshell漏洞核心类Request远程代码执行filter[]为回调函数,get[]或route[]或server[R......
  • (免费源码)计算机毕业设计必看必学 SSM大学生实习就业推荐系统68986 原创定制程序 java
    SSM大学生实习就业推荐系统 摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于角度存在偏差,人们经常能够获取不同类型的信息,这也是技术最为难以攻克的课题。针对大学生实习就业推荐系统等问题,对大学生实习就业推荐系统进行研究......
  • 微信小程序+php后台服务器实现登录流程实例说明(转)
    下面就对PHP后台实现微信小程序登录进行详细讲解。一、获取微信小程序登录凭证小程序登录流程中,首先需要通过微信小程序接口获取登录凭证(code)。我们需要在小程序端调用微信提供的wx.login()函数,该函数返回用户登录凭证code。例如:wx.login({success:function(res){......
  • PHP数据类型
    PHP变量存储不同的类型的数据,不同的数据类型可以做不一样的事情。PHP支持以下几种数据类型:String(字符串)Integer(整型)Float(浮点型)Boolean(布尔型)Array(数组)Object(对象)NULL(空值)Resource(资源类型)字符串一个字符串是一串字符的序列,就像"Helloworld!"。你可以将任何文本......
  • PHP条件语句
    咱们在编写代码时,您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。在PHP中,提供了下列条件语句:if语句-在条件成立时执行代码if...else语句-在条件成立时执行一块代码,条件不成立时执行另一块代码if...elseif....else语句-在若干条......
  • PHP运算符
    PHP中,赋值运算符=用于给变量赋值。在PHP中,算术运算符+用于把值加在一起。算术运算符';//换行echo($x-$y);//输出4echo'';//换行echo($x*$y);//输出60echo'';//换行echo($x/$y);//输出1.6666666666667echo'';//换行echo($x%$y);//......
  • PHP循环
    循环执行代码块指定的次数,或者当指定的条件为真时循环执行代码块。在PHP中,提供了下列循环语句:while-只要指定的条件成立,则循环执行代码块do...while-首先执行一次代码块,然后在指定的条件成立时重复这个循环for-循环执行代码块指定的次数foreach-根据数组中每个元素......
  • PHP数组
    数组能够在单个变量中存储多个值数组可以在单个变量中存储多个值,并且您可以根据键访问其中的值。创建数组在PHP中,array()函数用于创建数组:在PHP中,有三种类型的数组:数值数组-带有数字ID键的数组关联数组-带有指定的键的数组,每个键关联一个值多维数组-包含一个......
  • PHP类型比较
    虽然PHP是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对PHP变量进行比较,包含松散和严格比较。松散比较:使用两个等号==比较,只比较值,不比较类型。严格比较:用三个等号===比较,除了比较值,也比较类型。例如,"42"是一个字符串而42是一个整数。FALSE是一......