Есть несколько преимуществ использования методов получения. Уже упоминалось форматирование, сохранение внешнего интерфейса класса неизменным даже при изменении внутренних компонентов и отладка. Я также иногда использую их для кэширования, если у вас есть вычисляемое свойство.
например
class TestClass
{
private $_cachedTestProperty;
public function __get($varname)
{
switch ($varname)
{
case "testProperty":
if (!isset($this->_cachedTestProperty))
{
$this->_cachedTestProperty = /*calculate property*/
}
return $this->_cachedTestProperty;
break;
}
}
}
Если вы сделаете это, вам нужно помнить, чтобы сбросить кэшированное значение, если другое изменение в классе сделает его устаревшим
Они также могут предоставлять доступ только для чтения к защищенным / закрытым переменным
Как всегда с этими вещами, хотите ли вы использовать публичную собственность или получатель, зависит от того, что вы пытаетесь сделать. Они не всегда лучше, это случай использования правильного инструмента для работы