Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/funciones»
De WikiEducator
(→Funciones anónimas) |
(→Funciones anónimas) |
||
(13 revisiones intermedias por el mismo usuario no mostrado) | |||
Línea 1: | Línea 1: | ||
+ | <div id=parrafo> | ||
+ | <div class=slide> | ||
==Funciones== | ==Funciones== | ||
<br /> | <br /> | ||
Línea 272: | Línea 274: | ||
</source> | </source> | ||
===Funciones anónimas=== | ===Funciones anónimas=== | ||
− | {{MRM_Definicion|Qué son| | + | <br /> |
+ | {{MRM_Definicion|Title=Qué son| | ||
;Son funciones que no tienen nombre | ;Son funciones que no tienen nombre | ||
− | ;Se conocen como funciones de clousura | + | ;Se conocen como (funciones de clousura funciones cierre), y de hecho implementa la clase (Clousura)[https://www.php.net/manual/es/class.closure.php] |
− | + | ||
;Crear una función anónima: | ;Crear una función anónima: | ||
<source lang=php> | <source lang=php> | ||
Línea 281: | Línea 283: | ||
return "Hola desde una función anónima"; | return "Hola desde una función anónima"; | ||
} | } | ||
+ | </source> | ||
+ | }} | ||
+ | |||
+ | <br /> | ||
{{MRM_Pregunta| | {{MRM_Pregunta| | ||
;Ahora viene la paradoja de para qué puede servir y cómo la puedo invocar. | ;Ahora viene la paradoja de para qué puede servir y cómo la puedo invocar. | ||
}} | }} | ||
+ | <br /> | ||
+ | ;Para invocar a una función anónima tenemos dos formas: | ||
+ | :<span id=r>A través de las variables de funciones</span> | ||
+ | :<span id=r>Como argumento en una función</span>, o sea que el parámetro de una función sea otra función | ||
+ | ;Variables de funciones | ||
+ | *Declaro una variable y le asigno una función | ||
+ | *En realidad es una forma diferente de declarar la función e invocarla, tiene la ventaja de gestionar todo como variables (posible comodidad por parte del programador) | ||
+ | *Si uso esta técnica, no puedo invocar a la función antes de su declaración (ya que no existe en contenido de la variable) | ||
+ | *Consiste en declarar una variable y asiganer la función | ||
+ | *Posteriormente podré invocar la función a través de la variable (he de poner también paréntesis en la invocación y no olvidar el ; (punto y coma) en la asignación) | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | $mi_funcion = function () { | ||
+ | return "hola caracola"; | ||
+ | }; | ||
+ | d | ||
+ | echo $mi_funcion(); | ||
+ | //imprimiría "hola caracola" | ||
+ | //===================================== | ||
+ | |||
+ | echo $mi_funcion(); | ||
+ | |||
+ | $mi_funcion = function () { | ||
+ | return "hola caracola"; | ||
+ | }; | ||
+ | //Este código fallaría, | ||
+ | //===================================== | ||
+ | <?php | ||
+ | echo mi_funcion(); | ||
+ | |||
+ | function mi_funcion () { | ||
+ | return "hola caracola"; | ||
+ | }; | ||
+ | |||
+ | //Este código funcionaría, php legunaje de doble pasada en su interpretación, | ||
+ | ?> | ||
+ | |||
+ | </source> | ||
+ | |||
+ | |||
+ | |||
+ | <source lang=php> | ||
+ | |||
+ | </source> | ||
+ | ;Invocación usando la función como un parámetro en otra función | ||
+ | *Esto se puede conseguir ver, usando alguna función del sistema que espere recibir una función de clausura, como iremos viendo a lo largo del curso. | ||
+ | spl_autoload_register(https://www.php.net/manual/es/function.spl-autoload-register.php) | ||
+ | array_walk (https://www.php.net/manual/es/function.array-walk.php) | ||
+ | array_map (https://www.php.net/manual/es/function.array-map.php) | ||
+ | array_reduce (https://www.php.net/manual/es/function.array-reduce.php) | ||
+ | |||
+ | *Otra forma de utilizarlo, es usando la función <span id=r>call_user_func</span>, con esta función invocamos a una función anónima, necesitamos acceder a ello, y lo podemos hacer a través de un identificador, o escribiendo el código de la funćión anónima | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | call_user_func(function ($nombre){echo "hola $nombre";}, "Manuel"); | ||
+ | |||
+ | //Este código nos escribirá "hola Manuel"; | ||
+ | ?> | ||
+ | </source> | ||
+ | *Podríamos implementar el código anterior usando variables, posiblemente se puede considerar que mejoraríamos en legibilidad | ||
+ | <source lang=php> | ||
+ | <?php | ||
+ | $saludar = function ($nombre){ | ||
+ | echo "hola $nombre"; | ||
+ | }; | ||
+ | |||
+ | call_user_func($saludar, "Manuel"); | ||
+ | |||
+ | ?> | ||
</source> | </source> | ||
− | |||
− | |||
− | |||
===Funciones flecha=== | ===Funciones flecha=== | ||
Línea 294: | Línea 366: | ||
*Limitaciones de funciones flecha. | *Limitaciones de funciones flecha. | ||
# | # | ||
+ | </div> |
Última revisión de 04:05 1 dic 2022
Proceso de creación / invocación de una función
- Lo primero es declarar una función
- Esto implica dejar una zona de memoria identificada con el nombre de la función
- En contenido de esas posiciones de memoria serán las acciones de la función
- Estas acciones estarán establecidas no con valores reales, sino con los parámetros de la declaración
- Estos parámetros se conocen como parámetros formales
- Invocación de función
- Es un tipo de instrucción, invocar a una acción o función.
- lo primero que ocurrirá es que voy a esa zona de memoria
- Lo siguiente es dar los valores reales (de la invocación) a los parámetros de la función (de la declaracion.
- Una vez que la función termina de ejecutarse, se retornará a la instrucción siguiente de la invocación
- Si la función devuelve algún valor, se recogerá y asignará a la variable de la instrucción de asignación desde la cual se invocó
<?php function a(&$num1, &$num2, $num3){ echo "Dentro de la función visibilizando valores <hr />"; echo "Valor de los parámetros \$num1 = $num1 \$num2 = $num2 \$num3 = $num3<br />"; $num1+=5; $num2+=5; $num3+=5; echo "Valor de los parámetros \$num1 = $num1 \$num2 = $num2 \$num3 = $num3<br />"; echo "Salgo de la función"; } //Ahora considero programa principal $a=100; $b=200; $c=300; echo "En el main antes de invocar a la función visualizando variables<hr />"; echo "Valor de variables \$a = $a \$b = $b \$c = $c <br />"; a($a,$b,$c); echo "En el mail después de invocar a la función visualizando variables<hr />"; echo "Valor de variables \$a = $a \$b = $b \$c = $c <br />"; ?>