Обычно эти методы полезны, когда вы общаетесь с сторонним API или когда структура метода / членов неясна.
Допустим, вы пишете универсальную оболочку XML-RPC. Поскольку вы не знаете методов, доступных вам до загрузки файла WDL, имеет смысл использовать перегрузку.
Тогда вместо того, чтобы написать следующее:
$xmlrpc->call_method('DoSomething', array($arg1, $arg2));
Вы можете использовать:
$xmlrpc->DoSomething($arg1, $arg2);
, что является более естественным синтаксисом.
Вы также можете использовать перегрузку членов так же, как перегрузку методов для переменных объектов.
Только одна вещь, за которой вы хотите следить: ограничивайте его использование только объектами с переменной структурой или используйте его только для синтаксических ярлыков для методов получения и установки. Имеет смысл сохранить методы получения и установки в вашем классе для разделения бизнес-логики несколькими методами, но нет ничего плохого в том, чтобы использовать ее в качестве ярлыка:
class ShortcutDemo {
function &__get($name) {
// Usually you want to make sure the method
// exists using method_exists, but for sake
// of simplicity of this demo, I will omit
// that logic.
return call_user_method('get'.$name, $this);
}
function __set($name, &$value) {
return call_user_method('set'.$name, $this, $value);
}
private $_Name;
function &getName() { return $this->_Name; }
function setName(&$value) { $this->_Name = $value; }
}
Таким образом, вы можете продолжать использовать ваши методы получения и установки для проверки и установки ваших данных, и при этом использовать синтаксические ярлыки как таковые:
$shortcut->Name = 'Hello';