Diferencia entre revisiones de «Usuario:ManuelRomero/ProgramacionWeb/funciones»
De WikiEducator
(Página creada con «==Funciones== <br /> {{MRM_Objetivo| ;Las funciones es un elemento fundamental *Permite crear código modular *Una forma de estructurar nuestro programa }} </div> <div cl...») |
(→Funciones anónimas) |
||
(18 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 11: | Línea 13: | ||
===Declaración de funciones=== | ===Declaración de funciones=== | ||
<source lang=php> | <source lang=php> | ||
− | function | + | // Declarar una función |
− | + | function nombre_de_funcion([tipo_de_parametro] $parametro_formal[=valor_por_defecto], ...)[: tipo_retorno] | |
− | + | { | |
+ | ... | ||
+ | [return ...]; | ||
} | } | ||
+ | |||
+ | // Llamar | ||
+ | nombre_de_funcion($parametro_real); | ||
</source> | </source> | ||
Línea 22: | Línea 29: | ||
*Algo obvio, pero importante | *Algo obvio, pero importante | ||
*En la declaración tenemos tres partes | *En la declaración tenemos tres partes | ||
− | + | ;nombre o identificación de la función | |
− | + | ;parámetros_formales | |
+ | *Se especifican entre paréntesisi(Estos han de existir, aunque no haya parámetros) | ||
+ | *Se puede especificar el tipo de cada parámetro (a partir de versión 7.2) | ||
+ | *Se puede asignar un valor por defecto (En este caso podría no aportarse valor para este parámetro en la invocación) | ||
+ | ;Tipo de retorno | ||
+ | Es opcional | ||
#Cuerpo de la función, dentro de él puede estar la instrucción return, en cuyo momento termina la ejecución de la función y se vuelve a la siguiente instrucción del programa, siguiente a la invocación de la función. | #Cuerpo de la función, dentro de él puede estar la instrucción return, en cuyo momento termina la ejecución de la función y se vuelve a la siguiente instrucción del programa, siguiente a la invocación de la función. | ||
+ | #El return puede (debe) aportar el valor que queremos que la función retorno | ||
</div> | </div> | ||
Línea 43: | Línea 56: | ||
Los parámetros formales son variables locales a la función}} | Los parámetros formales son variables locales a la función}} | ||
</div> | </div> | ||
+ | |||
===Proceso de creación / invocación de una función=== | ===Proceso de creación / invocación de una función=== | ||
;Lo primero es declarar una función | ;Lo primero es declarar una función | ||
Línea 234: | Línea 248: | ||
</source> | </source> | ||
*Sin embargo si quieremos acceder al valor de '''''$var ''''' dentro de la función, sí que podemos | *Sin embargo si quieremos acceder al valor de '''''$var ''''' dentro de la función, sí que podemos | ||
− | * | + | *Hemos de usar la palabra reservada '''''$global''''' |
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
Línea 259: | Línea 273: | ||
Valor de var1 en progrma principal después de invocar la función: -21- | Valor de var1 en progrma principal después de invocar la función: -21- | ||
</source> | </source> | ||
+ | ===Funciones anónimas=== | ||
+ | <br /> | ||
+ | {{MRM_Definicion|Title=Qué son| | ||
+ | ;Son funciones que no tienen nombre | ||
+ | ;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: | ||
+ | <source lang=php> | ||
+ | function (){ | ||
+ | return "Hola desde una función anónima"; | ||
+ | } | ||
+ | </source> | ||
+ | }} | ||
+ | |||
+ | <br /> | ||
+ | {{MRM_Pregunta| | ||
+ | ;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> | ||
+ | |||
+ | ===Funciones flecha=== | ||
+ | *Las funciones flecha es una forma más corta de escribir funciones anónimas simples | ||
+ | Aparece en php en la versión 7.4 | ||
+ | *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 />"; ?>