如何像访问数组一样访问PHP类/对象?

84 24天之前 PHP 数组

答案

让类实现PHP的ArrayAccess(数组式访问)接口。

答案解析

例如:

class myClass implements ArrayAccess {
    private $container = array();
    public function __construct() {
        $this->container = array(
            "one"   => 1,
            "two"   => 2,
            "three" => 3,
        );
    }

    // 设置一个偏移位置的值
    public function offsetSet($offset, $value) {
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }

    // 检查一个偏移位置是否存在
    public function offsetExists($offset) {
        return isset($this->container[$offset]);
    }

    // 复位一个偏移位置的值
    public function offsetUnset($offset) {
        unset($this->container[$offset]);
    }

    // 获取一个偏移位置的值
    public function offsetGet($offset) {
        return isset($this->container[$offset]) ? $this->container[$offset] : null;
    }
}

然后就可以像数组一样访问这个类的对象了:

$obj = new myClass;

var_dump(isset($obj["two"]));
var_dump($obj["two"]);

unset($obj["two"]);
var_dump(isset($obj["two"]));
$obj["two"] = "A value";
var_dump($obj["two"]);

$obj[] = 'Append 1';
$obj[] = 'Append 2';
$obj[] = 'Append 3';
print_r($obj);