Diferencia entre revisiones de «Plantilla:PHP/Sobrecarga»
De WikiEducator
(Deshecha la revisión 21046 de ManuelRomero (disc.)) |
|||
Línea 35: | Línea 35: | ||
− | *A pesar de que tiene tres parámetros, la | + | *A pesar de que tiene tres parámetros, la invocamos sin parámetros |
− | *El resultado será que cada parámetro al ejecutar la función será de tipo null con valor null (es un tipo válido en php | + | *El resultado será que cada parámetro al ejecutar la función será de tipo '''''null''''' con valor '''''null''''' (es un tipo válido en php): |
[[Imagen:funcionSinParametrosReales.png]] | [[Imagen:funcionSinParametrosReales.png]] | ||
}} | }} | ||
Línea 54: | Línea 54: | ||
− | {{MRM_Ejemplo|Title=Invocar con | + | {{MRM_Ejemplo|Title=Invocar con 2 parámetros reales| |
<source lang=php> | <source lang=php> | ||
... | ... | ||
Línea 66: | Línea 66: | ||
[[Imagen:funcion2ParametrosReal.png]] | [[Imagen:funcion2ParametrosReal.png]] | ||
}} | }} | ||
− | {{MRM_Ejemplo|Title=Invocar con 3 parámetro reales | + | |
+ | {{MRM_Ejemplo|Title=Invocar con 3 parámetro reales| | ||
<source lang=php> | <source lang=php> | ||
... | ... | ||
− | echo "Invocando a <strong>verTipoParametros ( | + | echo "Invocando a <strong>verTipoParametros ('pedro',5,9)</strong><hr />"; |
− | verTipoParametros ( | + | verTipoParametros ('pedro',5,9); |
... | ... | ||
</source> | </source> | ||
− | *Ahora | + | *Ahora pasamos tres parámetros, como vemos el primero de tipo string y los otros dos enteros |
+ | *Podemos ver el resultado | ||
+ | [[Imagen:funcion3ParametrosReal.png]] | ||
+ | }} | ||
+ | |||
+ | |||
+ | {{MRM_Ejemplo|Title=Invocar con 3 parámetro reales uno de ellos un '''array'''| | ||
+ | <source lang=php> | ||
+ | ... | ||
+ | echo "Invocando a <strong>verTipoParametros ([1,4,'maría'],true,'sonia')</strong><hr />"; | ||
+ | verTipoParametros ([1,4,'maría'],true,'sonia'); | ||
+ | ... | ||
+ | </source> | ||
+ | *Ahora igualemente pasamos tres parámetros, pero uno de ellos es un array | ||
*Podemos ver el resultado | *Podemos ver el resultado | ||
[[Imagen:funcionParametroRealArray.png]] | [[Imagen:funcionParametroRealArray.png]] | ||
}} | }} | ||
+ | |||
+ | ===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 | ||
+ | [[Imagen:claseRacional.png]] | ||
======================================= | ======================================= | ||
− | *Supongamos que en el ejemplo anterior | + | *Supongamos que en el ejemplo anterior quisiéramos poder instanciar de la siguiente manera los racionales |
<source lang=php> | <source lang=php> | ||
$a = new racional ("8/5");/* 8/5 */ | $a = new racional ("8/5");/* 8/5 */ | ||
Línea 93: | Línea 112: | ||
*Una manera sencilla es ir viendo '''''de qué tipo'''' son los parámetros | *Una manera sencilla es ir viendo '''''de qué tipo'''' son los parámetros | ||
{{Tip|Recordar que null también es un tipo}} | {{Tip|Recordar que null también es un tipo}} | ||
− | *Vemos que podemos tener 0, 1 o 2 | + | *Vemos que podemos tener 0, 1 o 2 parámetros |
*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 | ||
<source lang=php> | <source lang=php> | ||
Línea 529: | Línea 548: | ||
}} | }} | ||
--> | --> | ||
+ | |||
==::== | ==::== |
Revisión de 01:45 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
|
- 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,$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:
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ámetro 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
===========================
- Supongamos que en el ejemplo anterior quisiéramos 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 parámetros
- 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