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