Hangi PHP SPL arabirimi nesneleri bunu sağlar:
$object->month = 'january';
echo $object['month']; // january
$record['day'] = 'saturday';
echo $record->day; // saturday
örneğin Böyle Doktrini (Doctrine_Record) gibi kütüphaneler gibi
Ben bunu nasıl uygularım? Ben ArrayObject kullanarak denedim, ama onlar düşündüm onlar gibi davranmazlar.
yani
$object = new ArrayObject();
$object['a'] = 'test';
$object['a'] == $object->a; // false
EDIT:
Ben Arrayable adında bir barebone uygulama çalıştı.
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);
}
}