自定义PHP数组类的实现

本文介绍了如何在PHP中实现一个自定义的数组类,该类通过实现ArrayAccess接口允许像数组一样访问对象。同时,通过实现Iterator接口,使得此类的实例可以被遍历。文中详细讲解了各个接口方法的功能,并通过代码示例进行了测试验证。
摘要由CSDN通过智能技术生成

php一开始是面向过程的语言,到后期才支持面向对象,数组在php中的类型是 “array”:

echo gettype(array());

输出

array

很多操作数组的函数都是以 “array” 开头,第一个参数为要操作的数组。

要实现一个数组类,需要实现ArrayAccess这个接口,这个接口的功能是 “提供像访问数组一样访问对象的能力” ,该接口有四个方法:

abstract public boolean offsetExists ( mixed $offset )
abstract public mixed offsetGet ( mixed $offset )
abstract public void offsetSet ( mixed $offset , mixed $value )
abstract public void offsetUnset ( mixed $offset )

这四个函数的作用如下(假设$obj是一个实现了该接口的类的实例):

  • offsetExists, 执行isset( $obj[$key])时触发
  • offsetGet,获取$obj[$key]时触发
  • offsetSet, 执行 $obj[$key] = $value时触发
  • offsetUnset, 执行unset($obj[$key])时触发

看上去有点类似C++的运算符重载。我们可以封装一个类,以一个数组变量作为其私有属性,这四个函数操作数组变量就行。

且看代码:
我们把这个类命名为XArray。

class XArray implements ArrayAccess{
   
    private $container = array();

    public function __construct($size = 0, $value = 0) {
   
        if ($size > 0) {
            $this->container = array_fill(0, $size, $value);
        }
    }

    public function offsetSet($offset, $value) {
   
        echo "call ", __METHOD__, PHP_EOL;
        if(is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }

    public function offsetUnset($offset) {
   
        echo "call ", __METHOD__, PHP_EOL;
        unset($this->container[$offset]);
    }

    public function offsetGet($offset) {
   
        echo "call ", __METHOD__, PHP_EOL;
        return isset($this->container[$offset]) ? 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值