Diferencia entre revisiones de «Plantilla:ManuelRomero/PHP/funcionesIntroduccion»
De WikiEducator
(Página creada con «--~~~~ ==Funciones== <div class=slide> {{MRM_Objetivo| ;Las funciones son un elemento fundamental *Permiten crear código modular. *Ayudan a estructurar el programa de man...») |
|||
| (4 revisiones intermedias por el mismo usuario no mostrado) | |||
| Línea 1: | Línea 1: | ||
| − | + | ||
==Funciones== | ==Funciones== | ||
<div class=slide> | <div class=slide> | ||
| Línea 26: | Línea 26: | ||
</div> | </div> | ||
<div class=slide> | <div class=slide> | ||
| − | *Es importante diferenciar entre | + | *Es importante diferenciar entre '''declarar''' una función e '''invocar''' una función. |
*Aunque parece obvio, es un punto importante. | *Aunque parece obvio, es un punto importante. | ||
| − | + | ;En la declaración de una función, tenemos dos partes: | |
| − | + | :Su cabecera, de la declaración | |
| − | + | :Su contenido, es decir, lo que hace la función. | |
| − | + | ;En la cabecera de la función podemos indentificar 3 elementos | |
| − | + | ;1.-Nombre o identificación de la función | |
| − | + | ** El nombre de la función es un identificador que empieza por una letra o guion bajo, seguido de 0 o más letras, números o guiones bajos. | |
| − | ; | + | |
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | + | ||
| − | * El nombre de la función es un identificador que empieza por una letra o guion bajo, seguido de 0 o más letras, números o guiones bajos. | + | |
{{Tip|Expresión regular para el identificador de funciones: | {{Tip|Expresión regular para el identificador de funciones: | ||
'''''[a-zA-Z_f_][a-zA-Z0-9_]*''''' | '''''[a-zA-Z_f_][a-zA-Z0-9_]*''''' | ||
}} | }} | ||
| + | |||
| + | ;2.-Parámetros formales | ||
| + | ** Se especifican entre paréntesis. (Los paréntesis son necesarios, aunque no haya parámetros). | ||
| + | ** Se puede (debe) especificar el tipo de cada parámetro (a partir de la versión 7.2). (Type hiding) | ||
| + | ** Se puede incluso especificar diferentes tipos en cada parámetro (Union Type). En este caso se separa por comas | ||
| + | <source lang=php> | ||
| + | //Función que solo recibe datos de tipo int o string | ||
| + | //Me muestra el dato y su tipo | ||
| + | function mostrar_datos(int|string $dato): string | ||
| + | { | ||
| + | $tipo = gettype($dato); | ||
| + | return "<h1>El dato $dato es de tipo $tipo</h1>"; | ||
| + | } | ||
| + | |||
| + | </source> | ||
| + | ** Se puede asignar un valor por defecto (si un parámetro tiene valor por defecto, no es obligatorio proporcionarle un valor en la invocación). | ||
| + | <source lang=php> | ||
| + | function saludar(string $nombre = "Invitado"): string | ||
| + | { | ||
| + | return "<h1>Hola $nombre, bienvenido a nuestro sitio web</h1>"; | ||
| + | } | ||
| + | </source> | ||
| + | |||
| + | ** El hecho de poder dar valores por defecto, nos permitirá sobrecargar una función, es decir, que según el número y tipo de los parámetros, pueda hacer una acción/es u otra/s. | ||
| + | ;3.-Tipo de retorno | ||
| + | ** Tambien se puede especificar que la función retorna diferentes valores | ||
| + | <source lang=php> | ||
| + | function sumar(int|float $a, int|float $b): int|float | ||
| + | { | ||
| + | return $a + $b; | ||
| + | } | ||
| + | |||
| + | </source> | ||
| + | ;El contenido de la función: | ||
| + | #Especifica el conjunto de acciones que realizará la función cuando sea invocada | ||
| + | #En el cuerpo de la función aparecerá la instrucción '''''return''''', la cual finaliza la ejecución de la función y devuelve el flujo al programa, a la instrucción que llamó a la función. Esta instrucción no es obligatorio que aparezca, en el caso de que la función no retorne ningún valor puede no aparecer. Este tipo de subprogramas se conoce como procedimientos. | ||
| + | # '''return''' devolverá un valor del tipo que hayamos especificado. | ||
| + | </div> | ||
| + | <hr /> | ||
| + | <div class=slide> | ||
| + | ====Identificador de función==== | ||
</div> | </div> | ||
<div class=slide> | <div class=slide> | ||
| − | + | ====Parámetros formales==== | |
*Son nombres de variables que usaremos al escribir el código o cuerpo de la función. | *Son nombres de variables que usaremos al escribir el código o cuerpo de la función. | ||
| − | *El nombre debe ser significativo y se convertirán en variables locales a la función. | + | *El nombre debe ser significativo y se convertirán en '''''variables locales a la función'''''. |
| − | *Al finalizar la función, estas variables se eliminan de la memoria. | + | *Al finalizar la función, estas variables '''''se eliminan de la memoria'''''. |
{{MRM_Puntos clave|Title=Parámetros formales| | {{MRM_Puntos clave|Title=Parámetros formales| | ||
Los parámetros formales son variables locales a la función.}} | Los parámetros formales son variables locales a la función.}} | ||
| Línea 266: | Línea 298: | ||
Valor de var1 en el programa principal después de invocar la función: -21- | Valor de var1 en el programa principal después de invocar la función: -21- | ||
</source> | </source> | ||
| + | |||
| + | |||
| + | {{MRM_Actividad|Title="Crear una función sobrecargada"| | ||
| + | * Quiero crear una función para mostrar un valor racional. | ||
| + | * Para ello necesitamos una función sobrecargada para que funcione en los siguientes casos: | ||
| + | <source lang=php> | ||
| + | factorial("8/7"); // => Me mostrará 8/7 | ||
| + | factorial(9,6); // => Me mostrará 9/6 | ||
| + | factorial(10); // => Me mostrará 10/1 | ||
| + | factorial(); // => Me mostrará 1/1 | ||
| + | factorial("15"); // => Me mostrará 15/1 | ||
| + | |||
| + | </source> | ||
| + | |||
| + | * La función debe aceptar: | ||
| + | ** Una cadena con formato "a/b" | ||
| + | ** Una cadena con formato "a" | ||
| + | ** Dos números enteros separados | ||
| + | ** Un número | ||
| + | ** Ningún valor | ||
| + | * Debe devolver siempre una fracción correctamente formateada. | ||
| + | }} | ||
| + | |||
| + | |||
| + | |||
| + | {{MRM_Actividad|Title="Login flexible con Union Types (email o ID)"| | ||
| + | * Vamos a crear un formulario de inicio de sesión donde el usuario podrá: | ||
| + | ** Iniciar sesión escribiendo su EMAIL | ||
| + | ** O iniciar sesión escribiendo su ID numérico | ||
| + | * El servidor deberá procesar ambos casos con una única función sobrecargada usando Union Types. | ||
| + | * La función nos mostrará un texto u otro según el caso: | ||
| + | ; Has iniciado la sesión con tu cuenta de correo xxxxx@xxx | ||
| + | ; Has iniciado la sesión con tu cuenta de el ID: xxxx | ||
| + | }} | ||
| + | |||
| + | |||
| + | |||
| + | }} | ||
Última revisión de 06:02 9 dic 2025
Contenido
Funciones
Proceso de creación / invocación de una función
- Primero, declaramos la función
- Esto implica reservar una zona de memoria identificada con el nombre de la función.
- El contenido de esas posiciones de memoria será el conjunto de acciones de la función.
- Estas acciones estarán definidas en función de los **parámetros formales** de la declaración.
- Invocación de la función
- La invocación es una instrucción para ejecutar la función.
- Lo primero que ocurre es que el programa accede a esa zona de memoria.
- Luego, se asignan los valores reales de la invocación a los parámetros formales de la función.
- Cuando la función termina de ejecutarse, se retorna a la instrucción que sigue a la llamada.
- Si la función devuelve un valor, este se asigna a la variable de la instrucción de asignación desde la cual se invocó.
</div>
<?php function a(&$num1, &$num2, $num3){ echo "Dentro de la función visualizando 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"; } //Programa principal $a = 100; $b = 200; $c = 300; echo "En el main antes de invocar la función visualizando variables<hr />"; echo "Valor de variables \$a = $a \$b = $b \$c = $c <br />"; a($a, $b, $c); echo "En el main después de invocar la función visualizando variables<hr />"; echo "Valor de variables \$a = $a \$b = $b \$c = $c <br />"; ?>



