Повсеместно рекомендуют не работать со свойствами объектов напрямую, а обращаться к ним через методы ->get*() и ->set*(), даже когда не нужна никакая проверка/обработка передаваемых значений.
Также нашел на просторах статью, где один умелец рекомендует, например, вместо установки для каждого свойства методов get, соорудить метод __call, который будет возвращать значение нужного свойства по маске. Вот примерная реализация такой штуки (с исключениями при несуществующих методах/свойствах):
public function __call($method, $arguments)
{
if (preg_match('/^get/', $method)) {
$property = strtolower(substr($method, 3));
if (property_exists($this, $property)) {
return $this->$property;
} else {
throw new Exception("Trying to access non-existent method '$method'");
}
} else {
throw new Exception("Trying to access non-existent method '$method'");
}
}
Вопрос - нафига такое сооружать, если можно сделать метод getProperty('property_name'). Разве такой вариант не будет лучше? И вообще, адекватные ли это решения?