Php 也可以用作数组的对象
到处都有一个包含几个元素的数组,例如:Php 也可以用作数组的对象,php,Php,到处都有一个包含几个元素的数组,例如: $myItem = [ 'a' => 10, 'b' => 20 ] 但是我想用一个类来代替它 $myClass=新的MyOwnClass(10,20) 但出于实际原因,我还是想打电话给你 $a = $myClass['a']; $b = $myClass['b']; 在php中是否可能出现类似的情况?因此,有一个名为的接口。你必须把它应用到你的课堂上 class MyOwnClass implements ArrayAccess {
$myItem = [ 'a' => 10, 'b' => 20 ]
但是我想用一个类来代替它
$myClass=新的MyOwnClass(10,20)
但出于实际原因,我还是想打电话给你
$a = $myClass['a'];
$b = $myClass['b'];
在php中是否可能出现类似的情况?因此,有一个名为的接口。你必须把它应用到你的课堂上
class MyOwnClass implements ArrayAccess {
private $arr = null;
public function __construct($arr = null) {
if(is_array($arr))
$this->arr = $arr;
else
$this->arr = [];
}
public function offsetExists ($offset) {
if($this->arr !== null && isset($this->arr[$offset]))
return true;
return false;
}
public function offsetGet ($offset) {
if($this->arr !== null && isset($this->arr[$offset]))
return $this->arr[$offset];
return false;
}
public function offsetSet ($offset, $value) {
$this->arr[$offset] = $value;
}
public function offsetUnset ($offset) {
unset($this->arr[$offset]);
}
}
使用:
实现接口对于使用[…]运算符访问,ArrayAccess就足够了。如果您希望对象更像一个数组,这样您也可以对其进行迭代,这样,您就可以扩展
class MyOwnClass implements ArrayAccess {
private $arr = null;
public function __construct($arr = null) {
if(is_array($arr))
$this->arr = $arr;
else
$this->arr = [];
}
public function offsetExists ($offset) {
if($this->arr !== null && isset($this->arr[$offset]))
return true;
return false;
}
public function offsetGet ($offset) {
if($this->arr !== null && isset($this->arr[$offset]))
return $this->arr[$offset];
return false;
}
public function offsetSet ($offset, $value) {
$this->arr[$offset] = $value;
}
public function offsetUnset ($offset) {
unset($this->arr[$offset]);
}
}
$arr = ["a" => 20, "b" => 30];
$obj = new MyOwnClass($arr);
$obj->offsetGet("a"); // Gives 20
$obj->offsetSet("b", 10);
$obj->offsetGet("b"); // Gives 10