Я должен быть в состоянии установить свой объект как это:
$obj->foo = 'bar';
тогда после этого установлен, мне нужно следующее, чтобы быть верным
if($obj['foo'] == 'bar'){
//more code here
}
Попробуйте расширить ArrayObject
Также необходимо реализовать __get
Magic Method, как упоминал Валентин Голев.
Ваш класс должен выглядеть следующим образом:
Class myClass extends ArrayObject {
// class property definitions...
public function __construct()
{
//Do Stuff
}
public function __get($n) { return $this[$n]; }
// Other methods
}
Просто добавьте реализует ArrayAccess
к вашему классу и добавьте необходимые методы:
Для этого необходимо реализовать интерфейс ArrayAccess
, что означает лишь реализацию нескольких (4 если быть точным) простых методов :
ArrayAccess::offsetExists
: Существует ли смещение или нет. ArrayAccess::offsetGet
: Возвращает значение при указанном смещении.ArrayAccess::offsetSet
: Присваивает значение указанному смещению. ArrayAccess::offsetUnset
: Устанавливает смещение. Полный пример приведен на странице руководства, на которую я указал ;-)
.Вы смешиваете объекты и массивы. Вы можете создать и получить доступ к объекту типа so:
$obj = new stdClass;
$obj->foo = 'bar';
if($obj->foo == 'bar'){
// true
}
и массиву типа so:
$obj = new Array();
$obj['foo'] = 'bar';
if($obj['foo'] == 'bar'){
// true
}
Вы можете определить класс и добавить реализацию ArrayAccess, если хотите получить доступ к своему классу как к массиву, так и к классу.
Ваш объект должен реализовать интерфейс ArrayAccess
, тогда PHP разрешит вам использовать квадратные скобки типа этого.
Вы также можете разыграть объект в виде массива:
if((array)$obj['foo'] == 'bar'){
//more code here
}
ArrayObject реализует интерфейс ArrayAccess (и некоторые другие). Используя флаг ARRAY_AS_PROPS, он предоставляет необходимую функциональность.
$obj = new ArrayObject(array(), ArrayObject::ARRAY_AS_PROPS);
$obj->foo = 'bar';
echo $obj['foo'];
В качестве альтернативы вы можете реализовать интерфейс ArrayAccess в одном из ваших собственных классов:
class Foo implements ArrayAccess {
public function offsetExists($offset) {
return isset($this->$offset);
}
public function offsetGet($offset) {
return $this->$offset;
}
public function offsetSet($offset , $value) {
$this->$offset = $value;
}
public function offsetUnset($offset) {
unset($this->$offset);
}
}
$obj = new Foo;
$obj->foo = 'bar';
echo $obj['foo'];