Diferencia entre revisiones de «Plantilla:ManuelRomero/PHP/funcionesIntroduccion»

De WikiEducator
Saltar a: navegación, buscar
(Declaración de funciones)
(Declaración de funciones)
Línea 30: Línea 30:
 
*En la declaración de una función, tenemos tres partes:
 
*En la declaración de una función, tenemos tres partes:
 
;1.-Nombre o identificación de la función
 
;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.
 +
{{Tip|Expresión regular para el identificador de funciones:
 +
'''''[a-zA-Z_f_][a-zA-Z0-9_]*'''''
 +
}}
 +
 
;2.-Parámetros formales
 
;2.-Parámetros formales
 
** Se especifican entre paréntesis. (Los paréntesis son necesarios, aunque no haya parámetros).
 
** Se especifican entre paréntesis. (Los paréntesis son necesarios, aunque no haya parámetros).
** Se puede especificar el tipo de cada parámetro (a partir de la versión 7.2).
+
** 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).
 
** 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
 
;3.-Tipo de retorno
Es opcional.
+
** 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 cuerpo de la función. Dentro de él puede estar 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.
 
#El cuerpo de la función. Dentro de él puede estar 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.
#`return` puede (o debe) devolver el valor que queremos que la función retorne.
+
# '''return''' puede (o debe) devolver el valor que queremos que la función retorne.
 
</div>
 
</div>
 
<hr />
 
<hr />
 
<div class=slide>
 
<div class=slide>
 
====Identificador de función====
 
====Identificador de 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.
 
{{Tip|Expresión regular para el identificador de funciones:
 
'''''[a-zA-Z_f_][a-zA-Z0-9_]*'''''
 
}}
 
 
</div>
 
</div>
 
<div class=slide>
 
<div class=slide>

Revisión de 05:50 9 dic 2025

Funciones


Icon objectives.jpg
Objetivo
Las funciones son un elemento fundamental
  • Permiten crear código modular.
  • Ayudan a estructurar el programa de manera ordenada.

Declaración de funciones

// 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);
  • Es importante diferenciar entre declarar una función e invocar una función.
  • Aunque parece obvio, es un punto importante.
  • En la declaración de una función, tenemos tres partes:
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.
Icon present.gif
Tip: Expresión regular para el identificador de funciones:
[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
//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>";
}
    • 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).
function saludar(string $nombre = "Invitado"): string
{
    return "<h1>Hola $nombre, bienvenido a nuestro sitio web</h1>";
}
    • 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
function sumar(int|float $a, int|float $b): int|float
{
    return $a + $b;
}
  1. El cuerpo de la función. Dentro de él puede estar 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.
  2. return puede (o debe) devolver el valor que queremos que la función retorne.

Identificador de función

Parámetros formales

  • 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.
  • Al finalizar la función, estas variables se eliminan de la memoria.


Icon key points.gif

Parámetros formales

Los parámetros formales son variables locales a la función.

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.

Declaracion funcion.png

Invocación de la función
  • La invocación es una instrucción para ejecutar la función.

Invocacion funcion 1.png

  • Lo primero que ocurre es que el programa accede a esa zona de memoria.

Invocacion funcion 2.png

  • Luego, se asignan los valores reales de la invocación a los parámetros formales de la función.

Invocacion funcion 3.png

  • 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>




Icon activity.jpg
Ejercicio usando funciones

Escribe un programa en el que en el programa principal se declaren dos variables, $a y $b.

  • Crea una función que reciba como parámetros locales $a y $b,
  • La función debe visualizar el valor de las variables, modificarlas, y volver a visualizarlas.
  • En el programa principal:
  1. Asigna valor a las variables.
  2. Visualízalas.
  3. Invoca la función.
  4. Visualiza de nuevo las variables.



  • Una posible solución
    <?php
       function a($a, $b){
           echo "Dentro de la función visualizando valores <hr />";
           echo "Valor de los parámetros \$a = $a \$b = $b <br />";
           $a += 5;
           $b += 5;
           echo "Valor de los parámetros \$a = $a \$b = $b <br />";
           echo "Salgo de la función";
       }
       //Programa principal
       $a = 100;
       $b = 200;
       echo "En el main antes de invocar la función visualizando variables<hr />";
       echo "Valor de variables \$a = $a \$b = $b <br />";
       a($a, $b);
       echo "En el main después de invocar la función visualizando variables<hr />";
       echo "Valor de variables \$a = $a \$b = $b <br />";
?>

Parámetros formales: Valores y referencias

  • Como hemos visto, los parámetros formales reciben valores pasados en la invocación de la función.
  • Si queremos que la función pueda modificar el valor de los parámetros, debemos pasarlos **por referencia**.
  • Esto permite que se pase la dirección de memoria donde se guarda el valor, en lugar del valor en sí.
  • En PHP no podemos visualizar ni operar con la dirección de memoria, ya que no existe la aritmética de punteros.
Parámetros formales
Valores y referencias

Para pasar el parámetro por referencia, simplemente coloca el símbolo & antes del nombre de la variable en la declaración de los parámetros:

function nombre_funcion(&$paramRef1, &$paramRef2, $paramVal1){
   ...
}


Icon activity.jpg
Ejercicio usando funciones y parámetros

Escribe un programa donde en el programa principal se declaren tres variables: $a, $b y $c.

  • Crea una función que reciba como parámetros &$num1, &$num2 y $num3.
  • La función debe visualizar el valor de las variables, modificarlas, y volver a visualizarlas.
  • En el programa principal:
  1. Asigna valor a las variables.
  2. Visualízalas.
  3. Invoca la función.
  4. Visualiza de nuevo las variables.



  <?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 />";
?>
Invocando funciones
  • Una vez creada una función, se puede invocar como si fuera una instrucción.
  • No sin razón, en ciertos contextos se refiere a funciones como "instrucciones virtuales".
  • En PHP, puedes invocar una función antes de declararla, siempre que esté en el mismo archivo.



Icon casestudy.gif
Ejemplo de invocación de funciones
Icon present.gif
Tip: Este código funcionará correctamente


    <?php
      a(5, 6);  
      /*Más instrucciones*/
      function a($a, $b){
          echo "Valor de $a";
          echo "Valor de $b";
      }




Icon casestudy.gif
Ejemplo de invocación de funciones
Icon present.gif
Tip: Este código no funcionará


<?php
      a(5, 6);  
      /*Más instrucciones*/
      include ("funciones.php");
?>
  • Contenido del archivo funciones.php
<?php
function a($a, $b){
          echo "Valor de $a";
          echo "Valor de $b";
}
?>


Variables dentro de una función

  • Dentro de una función, las variables que declaremos son **locales** a esa función.
  • No se puede acceder a su valor fuera de la función.
  • Esto también implica que dentro de una función no se puede acceder al valor de una variable definida fuera de la función.
  • Observa el siguiente ejemplo:
<?php
 
function modifica_valor(){
    echo "Valor de <b>var1</b> dentro de la función: -$var1- <br />";
    $var1++;
    echo "Valor de <b>var1</b> dentro de la función, modificado: -$var1- <br />";
}
 
$var1 = 20;
 
echo "Valor de <b>var1</b> en el programa principal antes de invocar la función: -$var1- <br />";
modifica_valor();
echo "Valor de <b>var1</b> en el programa principal después de invocar la función: -$var1- <br />";
?>
  • Genera la siguiente salida:
Valor de var1 en el programa principal antes de invocar la función: -20- 
Valor de var1 dentro de la función: -- 
Valor de var1 dentro de la función, modificado: -1- 
Valor de var1 en el programa principal después de invocar la función: -20-
  • Si queremos acceder al valor de $var1 dentro de la función, podemos usar la palabra reservada global:
<?php
 
function modifica_valor(){
    global $var1; // Indicamos que esta variable se puede usar globalmente.
    echo "Valor de <b>var1</b> dentro de la función: -$var1- <br />";
    $var1++;
    echo "Valor de <b>var1</b> dentro de la función, modificado: -$var1- <br />";
}
 
$var1 = 20;
 
echo "Valor de <b>var1</b> en el programa principal antes de invocar la función: -$var1- <br />";
modifica_valor();
echo "Valor de <b>var1</b> en el programa principal después de invocar la función: -$var1- <br />";
?>
  • Ahora, observamos que el valor dentro de la función se puede acceder y modificar.
Valor de var1 en el programa principal antes de invocar la función: -20- 
Valor de var1 dentro de la función: -20- 
Valor de var1 dentro de la función, modificado: -21- 
Valor de var1 en el programa principal después de invocar la función: -21-