Plantilla:ManuelRomero/PHP/funcionesIntroduccion

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:
1.-Nombre o identificación de la función
2.-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).
3.-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-