Я бы предположил, что Объекты доступа к данным являются более подходящим шаблоном для того, чего вы хотите достичь. Картограф, который вы показываете выше, только увеличивает сложность, но на самом деле не дает много преимуществ.
Что касается геттеров и сеттеров, вы можете использовать некоторые из магических методов PHP , чтобы очистить приведенный выше код. Следующее позволяет вам хранить ваши данные в защищенном массиве, предоставляя доступ к нему, который выглядит так, как будто это только через свойство объекта, но на самом деле через метод (так что вы можете предоставить свою собственную логику там; сделать вещи только для чтения, или скрыть некоторые и т. д.).
<?php
class User {
protected $_data = array();
public function __construct($data) {
$this->_data = $data;
}
// Get any value
public function __get($key) {
return array_key_exists($key, $this->_data) ? $this->_data[$key] : null;
}
// Set any value; leave out to make the data read only outside the class
public function __set($key, $val) {
$this->_data[$key] = $val;
}
// You should also implement __isset() and __unset()
}
Затем вы можете получить доступ к данным, как
<?php
$user = new User(array('foo' => 'bar'));
// Outputs "bar"
echo $user->foo;
Вы также можете упростить все это для себя, используя существующую PHP ORM библиотеку .