php arrayaccess 二维,PHP中的ArrayAccess用法详解

本文探讨了如何在PHP中利用ArrayAccess接口以数组形式访问和操作对象,介绍了其实现原理、应用实例和扩展可能性。通过实例演示了接口如何自动调用相应方法,并揭示了其在实际开发中的应用场景和灵活性。
摘要由CSDN通过智能技术生成

php arrayaccess 官方的说法是让你能以数组的形式访问对象,对于这种php内置接口一直不太明白有什么用,坚持多看文章,终于理解,特来分享,思路不同,更易于理解。

(1).创建一个学生类,并且实现arrayaccess 接口。<?php

class  student implements ArrayAccess

{

public $name = '小美';

private $age = 17;

public function offsetExists($offset)

{

// TODO: Implement offsetExists() method.

}

public function offsetGet($offset)

{

// TODO: Implement offsetGet() method.

}

public function offsetSet($offset, $value)

{

// TODO: Implement offsetSet() method.

}

public function offsetUnset($offset)

{

// TODO: Implement offsetUnset() method.

}

}

//实例化一个学生小美

$student = new student();

//用对象的方式去访问学生姓名

echo $student->name.PHP_EOL;

//用对象的方式给学生重新起名字

$student->name = '小茜';

//用对象的方式去访问学生姓名

echo $student->name,PHP_EOL;

上面是个很简单的类,初始化这个学生叫小美,然后通过对象的方式去访问和修改对象的属性,修改了学生的姓名。以上代码分别输出:小美

小茜

(2).既然这里要讲以数组的方式访问对象,那就来试试数组访问对象属性,访问学生的姓名class  student implements ArrayAccess

{

public $name = '小美';

private $age = 17;

public function offsetExists($offset)

{

// TODO: Implement offsetExists() method.

}

public function offsetGet($offset)

{

var_dump($offset);

}

public function offsetSet($offset, $value)

{

// TODO: Implement offsetSet() method.

}

public function offsetUnset($offset)

{

// TODO: Implement offsetUnset() method.

}

}

//实例化一个学生小美

$student = new student();

//数组方式访问学生的姓名

echo $student['name'];

我们直接输出$student['name']人家并没有输出学生小美的名字,而是调用内部的offsetGet方法,并将我传递的name下标传递进去。也就是说实现了ArrayAccess接口的类,如果用数组的方式访问对象,PHP底层先会调用offsetGet方法,并且将数组的下标传递进去。那么问题来了,我怎么用数组的方式去获取学生的名字呢?其实PHP只提供了我们访问数组形式访问对象的能力,但是具体的实现要我们来实现。如果真的只是简单的用数组形式访问对象,那么我们完全可以通过方法将对象转换为数组。PHP仅仅只提供我们这个能力,实现交由我们开发者,发挥的空间更大。完全可以自定义。

(3)通过上面我们知道一个类实现了ArrayAccess接口,当用数组形式访问它,它会自动调用offsetGet方法,那么用数组形式赋值,它就应该会调用offsetSet方法,使用empty方法检测数组的key是否存在,它就应该会自动调用offsetExists方法,使用unset方法删除数组的key是否存在,它就应该会自动调用offsetUnset方法,class  student implements ArrayAccess

{

public $name = '小美';

private $age = 17;

public function offsetExists($offset)

{

return property_exists('student', $offset);

}

public function offsetGet($offset)

{

return $this->$offset;

}

public function offsetSet($offset, $value)

{

$this->$offset = $value;

}

public function offsetUnset($offset)

{

$this->$offset = '';

}

}

//实例化一个学生小美

$student = new student();

//数组方式访问学生的姓名

echo $student['name'].PHP_EOL;

//数组方式重新给学生起名字,改年龄

$student['name'] = '小倩';

$student['age'] = 12;

//数组方式访问姓名和年龄

echo $student['name'].PHP_EOL;

echo $student['age'].PHP_EOL;

那么这个接口还能做什么,有哪些应用场景,下篇文章继续讲

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值