Какой интерфейс PHP SPL позволяет объектам делать это:
$object->month = 'january';
echo $object['month']; // january
$record['day'] = 'saturday';
echo $record->day; // saturday
например. например, в таких библиотеках, как Doctrine (Doctrine_Record)
как мне это реализовать? Я пытался использовать ArrayObject, но они не ведут себя так, как я думал.
т.е.
$object = new ArrayObject();
$object['a'] = 'test';
$object['a'] == $object->a; // false
EDIT:
Я попытался использовать базовую реализацию, которую я назвал Arrayable.
class Arrayable implements ArrayAccess
{
protected $container = array();
# implement ArrayAccess methods to allow array notation
# $object = new Arrayable();
# $object['value'] = 'some data';
function offsetExists($offset)
{
return isset($this->container[$offset]);
}
function offsetGet($offset)
{
return $this->container[$offset];
}
function offsetSet($offset, $value)
{
$this->container[$offset] = $value;
}
function offsetUnset($offset)
{
unset($this->container[$offset]);
}
# now, force $object->value to map to $object['value']
# using magic methods
function __set($offset, $value)
{
$this->offsetSet($offset, $value);
}
function __get($offset)
{
return $this->offsetGet($offset);
}
}