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