Plantilla:ManuelRomero/PHP/funciones

De WikiEducator
Saltar a: navegación, buscar

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:
Nombre o identificación de la función
Parámetros formales
  • 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 asignar un valor por defecto (si un parámetro tiene valor por defecto, no es obligatorio proporcionarle un valor en la invocación).
Tipo de retorno
Es opcional.
  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
  • 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_]*


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-