Zwykle metody te są przydatne, gdy komunikuje się z interfejsem API innej firmy lub gdy struktura metody/elementów jest niejasna.
Załóżmy, że piszesz ogólne opakowanie XML-RPC. Ponieważ nie znasz dostępnych metod przed pobraniem pliku WDL, warto użyć przeciążenia.
Następnie, zamiast pisać, co następuje:
$xmlrpc->call_method('DoSomething', array($arg1, $arg2));
Można użyć:
$xmlrpc->DoSomething($arg1, $arg2);
który składni bardziej naturalny.
Można również użyć przeciążania elementów w taki sam sposób jak przeciążanie metod dla obiektów zmiennych.
Jedna rzecz, na którą chcesz zwrócić uwagę: ogranicz jej użycie tylko do obiektów o zmiennej strukturze lub używaj jej tylko do skrótów syntaktycznych do modułów pobierających i ustawiających. To ma sens, aby utrzymać pobierające i ustawiające w swojej klasie na indywidualne logikę biznesową w wielu metod, ale nie ma nic złego w stosowaniu go jako skrót:
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; }
}
ten sposób można kontynuować przy użyciu pobierające i ustawiające, aby potwierdzić i ustawić swoje dane, i nadal używać skrótów składniowych, takich jak:
$shortcut->Name = 'Hello';
Chociaż nie pozbyłbym się jeszcze porywaczy i seterów. Wiele metod zawierających reguły biznesowe dla poszczególnych właściwości jest zwykle łatwiejsze do utrzymania i debugowania niż jedna wielka metoda zawierająca wszystkie reguły biznesowe dla wszystkich właściwości. Po prostu użyłbym '__get()' i '__set()' dla skrótu do wywołania 'getX',' setX'. Przeciążanie obiektów należy przechowywać tylko dla obiektów o zmiennej strukturze. –
Przeczytaj moją zaktualizowaną wersję. –
Jednak to nie działa tak jak C# Get/Set Property. Przynajmniej nie tak elastyczne, jeśli chcesz zweryfikować lub sprawdzić, co jest ustawione. – Extrakun