Di solito, questi metodi sono utili quando si comunica con un'API di terze parti o quando la struttura metodo/membri non è chiara.
Diciamo che state scrivendo un wrapper XML-RPC generico. Dato che non conosci i metodi disponibili prima di scaricare il file WDL, è logico utilizzare il sovraccarico.
Poi, invece di scrivere il seguente:
$xmlrpc->call_method('DoSomething', array($arg1, $arg2));
È possibile utilizzare:
$xmlrpc->DoSomething($arg1, $arg2);
che è una sintassi più naturale.
È inoltre possibile utilizzare l'overloading dei membri allo stesso modo dell'overload del metodo per oggetti variabili.
Solo una cosa che si desidera osservare: limitarne l'uso solo agli oggetti a struttura variabile o utilizzarla solo per le scorciatoie sintattiche per getter e setter. Ha senso mantenere getter e setter nella classe di separare la logica di business in diversi metodi, ma non c'è nulla di male a utilizzarlo come scorciatoia:
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; }
}
In questo modo è possibile continuare a utilizzare i tuoi getter e setter per la convalida e impostare i dati e comunque utilizzare le scorciatoie sintattiche come tale:
$shortcut->Name = 'Hello';
fonte
2009-08-11 20:38:29
Anche se non mi libererei ancora di getter e setter. Più metodi contenenti regole di business per le varie proprietà individuali sono in genere più facili da gestire e eseguire il debug di un metodo enorme contenente tutte le regole aziendali per tutte le proprietà. Userei solo '__get()' e '__set()' per un modo rapido di chiamare 'getX',' setX'. L'uso dell'overload dell'oggetto deve essere mantenuto solo per oggetti a struttura variabile. –
Leggi la mia versione aggiornata. –
Tuttavia, questo non funziona come C# Get/Set Property. Almeno non così flessibile, se si desidera verificare o convalidare ciò che viene impostato. – Extrakun