Plantilla:PHP/Sobrecarga

Sobrecarga
Un concepto muy importante y básico en la programación orientada a objetos. La sobrecarga es una concreción del principio de polimorfismo


 * Sin embargo este aspecto en php no es del todo intuitivo. No existe la sobrecarga como la entendemos en otros lenguajes.
 * No obstante tenemos técnicas para poder simular la sobrecarga.
 * Muchas veces es fundamental. Especialmente importante a la hora de sobrecargar el constructor de la clase.
 * Para simular la sobrecarga en php, jugamos con el concepto de que una variable que no tenga valor se considera de tipo null.
 * Lo vemos con una serie de ejemplos para dejar claro este concepto.
 * Tomamos como ejemplo una función:


 * Ahora la invocamos de diferente manera y vemos el resultado:

Sobrecargando el constructor
Imagen:claseRacional.png
 * Usando esta forma de trabajar vamos a sobre cargar el constructor de una clase
 * Tomamos una clase de tipo Racional. Un número Racional es un objeto que tendrá numerador y denominador
 * Ahora a la hora de construir el objeto planteamos la posibilidad de poder instanciar de la siguiente manera:
 * Aquí vemos claramente que necesitamos sobrecargar el constructor para que pueda responder a todas las situaciones
 * Aplicando los conceptos vistos antes, lo único que tenemos que hacer en el constructor es ir viendo  ''de qué tipo' son los parámetros.


 * Vemos que podemos tener 0, 1 o 2 parámetros
 * Por lo tanto la función constructora tendrá que tener 2 parámetros

Valor del racional $a = 1/1 Valor del racional $b = 5/1 Valor del racional $c = 5/6 Valor del racional $d = 6/6
 * Probamos este constructor con el siguiente código
 * Mostrando los siguientes resultados

Sobrecarga con __call(...)

 * Otra forma de poder hacer lo mismo es usando el método mágico __call($funcion, $parametros).


 * Ahora queremos usar un método llamado asigna que nos permita cambiar el valor de un racional. La forma de aportar el nuevo valor, queremos que sea la misma que la forma de construir el objeto
 * La forma de proceder será usando los métodos privados creados anteriormente
 * El siguiente código implementa la solución