Generalmente, estos métodos son útiles cuando se está comunicando con una API de un tercero o cuando la estructura del método/miembros no está clara.
Digamos que está escribiendo un contenedor XML-RPC genérico. Como no conoce los métodos disponibles antes de descargar el archivo WDL, tiene sentido usar Sobrecarga.
Entonces, en lugar de escribir la siguiente:
$xmlrpc->call_method('DoSomething', array($arg1, $arg2));
que puede utilizar:
$xmlrpc->DoSomething($arg1, $arg2);
que es una sintaxis más natural.
También puede usar la sobrecarga de miembros de la misma forma que la sobrecarga de métodos para objetos variables.
Solo una cosa que desea ver: limite su uso solo a objetos de estructura variable o úsela solo para accesos directos sintácticos a getters y setters. Tiene sentido mantener captadores y definidores de su clase para separar la lógica de negocio en múltiples métodos, pero no hay nada malo en utilizarlo como un acceso directo:
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; }
}
De este modo puede seguir utilizando sus métodos get y set para validar y establecer sus datos, y seguir utilizando los atajos sintácticos tales como:
$shortcut->Name = 'Hello';
Aunque todavía no me desharía de captadores y setters. Múltiples métodos que contienen reglas de negocio para las diversas propiedades individuales generalmente son más fáciles de mantener y depurar, luego un método enorme que contiene todas las reglas comerciales para todas las propiedades. Solo usaría '__get()' y '__set()' para un acceso directo para llamar a 'getX', 'setX'. El uso de sobrecarga de objetos debe mantenerse solo para objetos de estructura variable. –
Lea mi versión actualizada. –
Sin embargo, esto realmente no funciona como C# Get/Set Property. Al menos no tan flexible, si desea verificar o validar lo que se está configurando. – Extrakun