Diferencia entre revisiones de «Plantilla:PHP/Sobrecarga»
De WikiEducator
(→Sobrecargando el constructor) |
|||
Línea 122: | Línea 122: | ||
</source> | </source> | ||
− | *Especificamos el código | + | *Especificamos el código de cómo se podría hacer |
− | + | ||
<source lang=php> | <source lang=php> | ||
class Racional { | class Racional { | ||
Línea 193: | Línea 192: | ||
} | } | ||
</source> | </source> | ||
− | --> | + | ;Esta sería un posibilidad, pero debemos de intentar crear un código más compacto y realizar una estratelgia más compacta. El ejemplo anterior lo podríamos compactar de la siguiente manera. |
+ | En ella vamos a inicializar los parámetros con un valor que quiero que tengan si no se aporta valor <span class="r">1</span> | ||
+ | Posteriormente en el código establezco la situación en el caso de que el primer parámetro sea string y asigno los valores a numerador y denominador. | ||
+ | Hecho esto, ya hemos considerado todas las opciones, ahora ya solo queda inicializar los atributos con estos valores. | ||
+ | |||
+ | <source lang=php> | ||
+ | public function __construct($num=1,$den=1){ | ||
+ | if (is_string($num)){ | ||
+ | $numero= explode("/",$num); | ||
+ | $num= $numero[0]; | ||
+ | $den= $numero[1]; | ||
+ | } | ||
+ | $this->num= $num; | ||
+ | $this->den= $den; | ||
+ | } | ||
+ | </source> | ||
*Probamos este constructor con el siguiente código | *Probamos este constructor con el siguiente código | ||
<source lang=php> | <source lang=php> |
Revisión de 19:46 10 feb 2023
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:
Ejemplo
| |
function verTipoParametros($a=null,$b=null,$c=null){ echo "Primer parámetro "; var_dump($a); echo "Segundo parámetro "; var_dump($b); echo "Tercer parámetro "; var_dump($c); } </nowiki>
|
- Ahora la invocamos de diferente manera y vemos el resultado:
Invocar sin parámetros reales
| |
echo "Invocando a <strong>verTipoParametros ()</strong><hr / />"; verTipoParametros (); }
|
Invocar con 1 parámetro real
| |
... echo "Invocando a <strong>verTipoParametros (5)</strong><hr />"; verTipoParametros (5); ...
|
Invocar con 2 parámetros reales
| |
... echo "Invocando a <strong>verTipoParametros (5,7)</strong><hr />"; verTipoParametros (5,7); ...
|
Invocar con 3 parámetros reales
| |
... echo "Invocando a <strong> verTipoParametros ('pedro',5,9) </strong><hr />"; verTipoParametros ('pedro',5,9); ...
|
Invocar con 3 parámetro reales uno de ellos un array
| |
... echo "Invocando a <strong> verTipoParametros ([1,4,'maría'],true,'sonia') </strong><hr />"; verTipoParametros ([1,4,'maría'],true,'sonia'); ...
|
Sobrecargando el constructor
- 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:
$r1 = new Racional ("8/5");/* 8/5 */ $r2 = new Racional (5,4); /* 5/6 */ $r3 = new Racional (5); /* 5/1 */ $r4 = new Racional (); /* 1/1 */
- 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.
Tip: Recordar que null también es un tipo
- Vemos que podemos tener 0, 1 o 2 parámetros
- Por lo tanto la función constructora tendrá que tener 2 parámetros