Если вы просто хотите получить доступ к массиву model_data
из контекста объекта-контейнера, вам следует использовать магический метод __get
или реализовать ArrayAccess
интерфейс.
__get
- это простой выход, так как реализация будет выглядеть примерно так:
function __get($name)
{
if (array_key_exists($name, $this->model_data))
{
return $this->model_data[$name];
}
return;
}
Чтобы получить доступ к данным, достаточно просто вызвать свойство объекта: $obj->property_name
или в случае, если вы используете строку: $obj->{$property}
Конечно, это может помешать любым вашим общедоступным атрибутам (как правило, в любом случае плохая идея иметь их).
В качестве альтернативы вы можете настроить свой объект как реализацию ArrayAccess, которая позволит вам получить доступ к свойству как: $obj['property_name']
или $obj[$property]
Оба решения позволят вам иметь настраиваемое управление доступом, если вы хотите скрыть имена полей или настроить способ получения данных позже.
AFAIK метод ArrayAccess работает быстрее, но вам необходимо проверить его, чтобы быть уверенным. Магические методы имеют тенденцию быть немного медленными.