如何将对象用作数组?

时间:2014-03-21 13:41:13

标签: php oop magic-methods

我想使用下一种语法:

$o = new MyClass();
$o['param'] = 'value'; // set property "param" in "value" for example

现在我有一个错误:

Fatal error: Cannot use object of type MyClass as array

我可以使用这样的对象吗?也许有任何魔术方法?

2 个答案:

答案 0 :(得分:5)

您可以做的是创建一个名为MyClass的新类,并使其实现ArrayAccess接口。

然后您可以使用:

$myArray = new MyClass();
$myArray['foo'] = 'bar';

虽然使用起来比较容易:

$myArray->foo = 'bar';

答案 1 :(得分:4)

您的对象必须实现ArrayAccess interface

class MyClass extends ArrayAccess
{
   private $container = array();

   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;
    }
}