Diferencia entre revisiones de «Plantilla:PHP/Sobrecarga»
De WikiEducator
(Página creada con «===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''' {{MMF_...») |
|||
Línea 1: | Línea 1: | ||
+ | {{TEP}} | ||
===Sobrecarga=== | ===Sobrecarga=== | ||
Un concepto muy importante y básico en la programación orientada a objetos. | Un concepto muy importante y básico en la programación orientada a objetos. | ||
Línea 91: | Línea 92: | ||
[[Imagen:funcion3ParametrosReal.png]] | [[Imagen:funcion3ParametrosReal.png]] | ||
}} | }} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
*Supongamos que en el ejemplo anterior quisiérmos poder instanciar de la siguiente manera los racionales | *Supongamos que en el ejemplo anterior quisiérmos poder instanciar de la siguiente manera los racionales | ||
Línea 109: | Línea 104: | ||
#sobrecargar con '''''métodos mágicos''''' | #sobrecargar con '''''métodos mágicos''''' | ||
;Sobrecargar en el constructor | ;Sobrecargar en el constructor | ||
− | *Una | + | *Una manera sencilla 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 paŕametros | *Vemos que podemos tener 0, 1 o 2 paŕametros | ||
*Por lo tanto la función constructora tendrá que tener 3 parámetros inicializados por si no le pasamos valores | *Por lo tanto la función constructora tendrá que tener 3 parámetros inicializados por si no le pasamos valores |
Revisión de 01:08 2 dic 2016
Trabajo en proceso, espera cambios frecuentes. Tu ayuda y retroalimentación son bienvenidos. Ver página de charlas. |
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 Plantilla:MMF Definicion
- 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.
- Vamos a ver como podemos implementar la sobrecarga en php
- Para simular la sobrecarga jugamos con el concepto de que una variable que no tenga valor se considera de tipo null
- A coninuación una serie de ejemplos para dejar claro este concepto
- Tomamos como ejemplo una función
Ejemplo
| |
function verTipoParametros($a,$b,$c){ echo "Primer parámetro "; var_dump($a); echo "Segundo parámetro "; var_dump($b); echo "Tercer parámetro "; var_dump($c); }
|
- Ahora la invocamos de diferente manera y vemos el resultado
{{{1}}} |
{{{1}}} |
- Supongamos que en el ejemplo anterior quisiérmos poder instanciar de la siguiente manera los racionales
$a = new racional ("8/5");/* 8/5 */ $b = new racional (5,4); /* 5/6 */ $c = new racional (5); /* 5/1 */ $d = new racional (); /* 1/1 */
- Para esta situación tenemos diferentes estrategias. En este tema vamos a analizar 2:
- sobrecargar en el constructor
- sobrecargar con métodos mágicos
- Sobrecargar en el constructor
- Una manera sencilla 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 paŕametros
- Por lo tanto la función constructora tendrá que tener 3 parámetros inicializados por si no le pasamos valores
public function __construct($cadenaOrNum=null, $den = null) { .... }
Siguiendo el ejemplo establecido anteriormente realiza un constructor que permita instanciar un objeto de la clase racional de la siguiente manera $a = new racional ("8/5");/* 8/5 */ $b = new racional (5,4); /* 5/6 */ $c = new racional (5); /* 5/1 */ $d = new racional (); /* 1/1 */
|
- métodos mágicos y la sobrecarga
- Hemos visto __construct y __destruct
- Vamos a analizar un método mágico para implementar la sobrecarga y exponer su funcionamiento
- Ël método __call($nombreFuncion, $argumentos)' es un método mágico que se invoca cuando intentamos acceder a un método de la clase y este método no existe
- Volvamos a nuestro racional
- Supongamos que los métodos de sobrecarga que queremos son los usados en el constructor __construct
// caso $a = racional(8,7); racionalNumDen($cadenaOrNum, $den ); // caso $a = racional(8); racionalNum($cadenaOrNum ); // caso $a = racional("8/7"); racionalCadena($cadenaOrNum); // caso $a = racional(); y se inicia con 1/1 racionalVacio();
- Pero imagenimos que nos gustaría que todos tuvieran el mismo nombre, por ejemplo crea().
- Vamos a usar el método __call para ello
- Este método recibe dos argumentos
- $nombreFuncion es el nombre del método que se invoca
- $argumentos es un array con los argumentos de la función