我想使用下一种语法:
$o = new MyClass();
$o['param'] = 'value'; // set property "param" in "value" for example
现在我有一个错误:
Fatal error: Cannot use object of type MyClass as array
我可以使用这样的对象吗?也许有任何魔术方法?
答案 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;
}
}