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

De WikiEducator
Saltar a: navegación, buscar
(Página creada con «<br /> {{MRM_Objetivo| ;Las funciones es un elemento fundamental *Permite crear código modular *Una forma de estructurar nuestro programa }} </div> <div class=slide> ===...»)
 
Línea 1: Línea 1:
 
<br />
 
<br />
 
{{MRM_Objetivo|
 
{{MRM_Objetivo|
;Las funciones es un elemento fundamental
+
;Las funciones son un elemento fundamental
*Permite crear código modular
+
*Permiten crear código modular.
*Una forma de estructurar nuestro programa
+
*Ayudan a estructurar el programa de manera ordenada.
 
}}
 
}}
 
</div>
 
</div>
Línea 23: Línea 23:
 
</div>
 
</div>
 
<div class=slide>
 
<div class=slide>
*Es importante diferenciar entre declarar una función e invocar a una función
+
*Es importante diferenciar entre **declarar** una función e **invocar** una función.
*Algo obvio, pero importante
+
*Aunque parece obvio, es un punto importante.
*En la declaración tenemos tres partes
+
*En la declaración de una función, tenemos tres partes:
;nombre o identificación de la función
+
;Nombre o identificación de la función
;parámetros_formales
+
;Parámetros formales
*Se especifican entre paréntesisi(Estos han de existir, 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 versión 7.2)
+
*Se puede especificar el tipo de cada parámetro (a partir de la 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)
+
*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
 
;Tipo de retorno
  Es opcional
+
  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.
+
#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 return puede (debe) aportar el valor que queremos que la función retorno
+
#`return` puede (o debe) devolver el valor que queremos que la función retorne.
 
</div>
 
</div>
 
  
 
<div class=slide>
 
<div class=slide>
 
;Identificador de función
 
;Identificador de función
* El nombre de función es un identificador que empieza por una letra o guión bajo, seguido 0 o muchas 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_]*'''''
 
}}
 
}}
Línea 47: Línea 46:
 
<div class=slide>
 
<div class=slide>
 
;Parámetros formales
 
;Parámetros formales
*Son nombres de variables que usaré 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 ha de 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.
*Una vez que se termina la función estas variables desaparecerán de 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.}}
 
</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
+
;Primero, declaramos la función
*Esto implica dejar una zona de memoria identificada con el nombre de la función
+
*Esto implica reservar 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
+
*El contenido de esas posiciones de memoria será el conjunto de acciones de la función.
*Estas acciones estarán establecidas no con valores reales, sino con los parámetros de la declaración
+
*Estas acciones estarán definidas en función de los **parámetros formales** de la declaración.
*Estos parámetros se conocen como parámetros formales
+
 
[[Archivo:declaracion_funcion.png]]
 
[[Archivo:declaracion_funcion.png]]
;Invocación de función
+
;Invocación de la función
*Es un tipo de instrucción, invocar a una acción o función.
+
*La invocación es una instrucción para ejecutar la función.
 
[[Archivo:invocacion_funcion_1.png]]
 
[[Archivo:invocacion_funcion_1.png]]
*lo primero que ocurrirá es que voy a esa zona de memoria
+
*Lo primero que ocurre es que el programa accede a esa zona de memoria.
 
[[Archivo:invocacion_funcion_2.png]]
 
[[Archivo:invocacion_funcion_2.png]]
*Lo siguiente es dar los valores reales (de la invocación) a los parámetros de la función (de la declaracion.
+
*Luego, se asignan los valores reales de la invocación a los parámetros formales de la función.
 
[[Archivo:invocacion_funcion_3.png]]
 
[[Archivo:invocacion_funcion_3.png]]
*Una vez que la función termina de ejecutarse, se retornará a la instrucción siguiente de la invocación
+
*Cuando la función termina de ejecutarse, se retorna a la instrucción que sigue a la llamada.
*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ó
+
*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>
 
+
 
+
  
 
<div class=slide>
 
<div class=slide>
 
{{MRM_Actividad|Title=Ejercicio usando funciones|
 
{{MRM_Actividad|Title=Ejercicio usando funciones|
'''''Haz un programa donde en el programa principal se creen dos variables $a y $b'''''
+
'''''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'''''
+
*Crea una función que reciba como parámetros locales '''''$a''''' y '''''$b''''',
*La función visualizará el valor de las variables, las modificará y las volverá a visualizar
+
*La función debe visualizar el valor de las variables, modificarlas, y volver a visualizarlas.
*El programa principal  
+
*En el programa principal:
#asignará valor a las variables
+
#Asigna valor a las variables.
#las visualizará
+
#Visualízalas.
#invocará a la función
+
#Invoca la función.
#volverá a visualizar las variables
+
#Visualiza de nuevo las variables.
 
}}
 
}}
 
</div>
 
</div>
Línea 92: Línea 88:
 
           echo "Dentro de la función visualizando valores <hr />";
 
           echo "Dentro de la función visualizando valores <hr />";
 
           echo "Valor de los parámetros \$a = $a \$b = $b <br />";
 
           echo "Valor de los parámetros \$a = $a \$b = $b <br />";
           $a+=5;
+
           $a += 5;
           $b+=5;
+
           $b += 5;
 
           echo "Valor de los parámetros \$a = $a \$b = $b <br />";
 
           echo "Valor de los parámetros \$a = $a \$b = $b <br />";
 
           echo "Salgo de la función";
 
           echo "Salgo de la función";
 
       }
 
       }
       //Ahora considero programa principal
+
       //Programa principal
       $a=100;
+
       $a = 100;
       $b=200;
+
       $b = 200;
       echo "En el main antes de invocar a la función visualizando variables<hr />";
+
       echo "En el main antes de invocar la función visualizando variables<hr />";
 
       echo "Valor de variables \$a = $a \$b = $b <br />";
 
       echo "Valor de variables \$a = $a \$b = $b <br />";
       a($a,$b);
+
       a($a, $b);
       echo "En el mail  después de invocar a la función visualizando variables<hr />";
+
       echo "En el main después de invocar la función visualizando variables<hr />";
 
       echo "Valor de variables \$a = $a \$b = $b <br />";
 
       echo "Valor de variables \$a = $a \$b = $b <br />";
 
?>
 
?>
Línea 112: Línea 108:
  
 
===Parámetros formales: Valores y referencias===
 
===Parámetros formales: Valores y referencias===
*Cómo hemos visto, los parámetros formales son valores pasados en la invocación a la función
+
*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 valores de los parámetros, en este caso hemos de pasarlos por referencia
+
*Si queremos que la función pueda modificar el valor de los parámetros, debemos pasarlos **por referencia**.
*En este caso lo que ocurre en realidad es que pasamos la dirección de memoria dónde se guarda el valor.
+
*Esto permite que se pase la dirección de memoria donde se guarda el valor, en lugar del valor en sí.
*La dirección de memoria, no la podremos visualizar ni operar con ella, pues en php no existe la aritmética de punteros o direcciones de memoria
+
*En PHP no podemos visualizar ni operar con la dirección de memoria, ya que no existe la aritmética de punteros.
 
</div>
 
</div>
  
 
<div class=slide>
 
<div class=slide>
 
;Parámetros formales: Valores y referencias
 
;Parámetros formales: Valores y referencias
Para pasar el parámetro por referencia, simplemente hay que poner el símbolo de dirección de memoria '''''&''''' antes del nombre de la variable en la declaración de parámetros
+
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:
 
<source lang=php>
 
<source lang=php>
 
function nombre_funcion(&$paramRef1, &$paramRef2, $paramVal1){
 
function nombre_funcion(&$paramRef1, &$paramRef2, $paramVal1){
Línea 127: Línea 123:
 
</source>
 
</source>
 
</div>
 
</div>
 
  
 
<div class=slide>
 
<div class=slide>
{{MRM_Actividad|Title=Ejercicio usando funciones parámetros|
+
{{MRM_Actividad|Title=Ejercicio usando funciones y parámetros|
'''''Haz un programa donde en el programa principal se creen dos variables $a y $b y $c'''''
+
'''''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 locales '''''&$num1''''','''''&$num2''''' y '''''$num3'''''
+
*Crea una función que reciba como parámetros '''''&$num1''''', '''''&$num2''''' y '''''$num3'''''.
*La función visualizará el valor de las variables, las modificará y las volverá a visualizar
+
*La función debe visualizar el valor de las variables, modificarlas, y volver a visualizarlas.
*El programa principal  
+
*En el programa principal:
#asignará valor a las variables
+
#Asigna valor a las variables.
#las visualizará
+
#Visualízalas.
#invocará a la función
+
#Invoca la función.
#volverá a visualizar las variables
+
#Visualiza de nuevo las variables.
 
}}
 
}}
 
</div>
 
</div>
Línea 145: Línea 140:
 
   <?php
 
   <?php
 
       function a(&$num1, &$num2, $num3){
 
       function a(&$num1, &$num2, $num3){
           echo "Dentro de la función visibilizando valores <hr />";
+
           echo "Dentro de la función visualizando valores <hr />";
 
           echo "Valor de los parámetros \$num1 = $num1 \$num2 = $num2 \$num3 = $num3<br />";
 
           echo "Valor de los parámetros \$num1 = $num1 \$num2 = $num2 \$num3 = $num3<br />";
           $num1+=5;
+
           $num1 += 5;
           $num2+=5;
+
           $num2 += 5;
           $num3+=5;
+
           $num3 += 5;
 
            
 
            
 
           echo "Valor de los parámetros \$num1 = $num1 \$num2 = $num2 \$num3 = $num3<br />";
 
           echo "Valor de los parámetros \$num1 = $num1 \$num2 = $num2 \$num3 = $num3<br />";
 
           echo "Salgo de la función";
 
           echo "Salgo de la función";
 
       }
 
       }
       //Ahora considero programa principal
+
       //Programa principal
       $a=100;
+
       $a = 100;
       $b=200;
+
       $b = 200;
       $c=300;
+
       $c = 300;
       echo "En el main antes de invocar a la función visualizando variables<hr />";
+
       echo "En el main antes de invocar la función visualizando variables<hr />";
 
       echo "Valor de variables \$a = $a \$b = $b \$c = $c <br />";
 
       echo "Valor de variables \$a = $a \$b = $b \$c = $c <br />";
       a($a,$b,$c);
+
       a($a, $b, $c);
       echo "En el mail  después de invocar a la función visualizando variables<hr />";
+
       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 />";
 
       echo "Valor de variables \$a = $a \$b = $b \$c = $c <br />";
 
?>
 
?>
Línea 167: Línea 162:
 
<div class=slide>
 
<div class=slide>
 
;Invocando funciones
 
;Invocando funciones
*Una vez creada una función la podemos invocar como si fuera una instrucción del lenguaje
+
*Una vez creada una función, se puede invocar como si fuera una instrucción.
*No sin razón en determinados ambientes se conoce a las funciones y procedimientos como instrucciones virtuales ...
+
*No sin razón, en ciertos contextos se refiere a funciones como "instrucciones virtuales".
*En php puedo invocar a una función antes de declararla, siempre que la declare en el mismo fichero
+
*En PHP, puedes invocar una función antes de declararla, siempre que esté en el mismo archivo.
 
</div>
 
</div>
  
 
<div class=slide>
 
<div class=slide>
  
 
+
{{MRM_Ejemplo|Title=Ejemplo de invocación de funciones|
{{MRM_Ejemplo|Title = ejemplo invocación a funciones|
+
 
{{Tip|Este código funcionará correctamente}}
 
{{Tip|Este código funcionará correctamente}}
 
<source lang=php>
 
<source lang=php>
 
     <?php
 
     <?php
       a(5,6);   
+
       a(5, 6);   
       /*Mas instrucciones*/
+
       /*Más instrucciones*/
       function a ($a, $b){
+
       function a($a, $b){
           echo "valor de $a";
+
           echo "Valor de $a";
           echo "valor de $b";
+
           echo "Valor de $b";
 
       }
 
       }
 
</source>
 
</source>
Línea 191: Línea 185:
 
<div class=slide>
 
<div class=slide>
  
{{MRM_Ejemplo|Title = ejemplo invocación a funciones|
+
{{MRM_Ejemplo|Title=Ejemplo de invocación de funciones|
{{Tip|Este código no funcionará }}
+
{{Tip|Este código no funcionará}}
 
<source lang=php>
 
<source lang=php>
 
<?php
 
<?php
       a(5,6);   
+
       a(5, 6);   
       /*Mas instrucciones*/
+
       /*Más instrucciones*/
 
       include ("funciones.php");
 
       include ("funciones.php");
 
?>
 
?>
 
</source>
 
</source>
*Contenido del ficheor funciones.php
+
*Contenido del archivo funciones.php
 
<source lang=php>
 
<source lang=php>
 
<?php
 
<?php
function a ($a, $b){
+
function a($a, $b){
           echo "valor de $a";
+
           echo "Valor de $a";
           echo "valor de $b";
+
           echo "Valor de $b";
 
}
 
}
 
?>
 
?>
Línea 211: Línea 205:
 
}}
 
}}
 
</div>
 
</div>
 
 
  
 
<div class="slide">
 
<div class="slide">
 
===Variables dentro de una función===
 
===Variables dentro de una función===
*Dentro de una función las variables que declaremos son locales a esa función.
+
*Dentro de una función, las variables que declaremos son **locales** a esa función.
*No podré acceder a su valor fuera de la 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 puedo acceder al valor de una variable definida 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
+
*Observa el siguiente ejemplo:
 
<source lang=php>
 
<source lang=php>
 
<?php
 
<?php
 
  
 
function modifica_valor(){
 
function modifica_valor(){
     echo "Valor de <b>var1</b> dentro de función -$var1- <br /> ";
+
     echo "Valor de <b>var1</b> dentro de la función: -$var1- <br />";
 
     $var1++;
 
     $var1++;
     echo "Valor de <b>var1</b> dentro de función moficada -$var1- <br /> ";
+
     echo "Valor de <b>var1</b> dentro de la función, modificado: -$var1- <br />";
 
}
 
}
  
 
$var1 = 20;
 
$var1 = 20;
  
echo "Valor de <b>var1</b> en programa principal antes de invocar función: -$var1- <br />";
+
echo "Valor de <b>var1</b> en el programa principal antes de invocar la función: -$var1- <br />";
 
modifica_valor();
 
modifica_valor();
echo "Valor de <b>var1</b> en progrma principal después de invocar la función: -$var1- <br />";
+
echo "Valor de <b>var1</b> en el programa principal después de invocar la función: -$var1- <br />";
 
?>
 
?>
 
</source>
 
</source>
*Vemos que genera la siguiente salida
+
*Genera la siguiente salida:
 
<source lang=bash>
 
<source lang=bash>
Valor de var1 en programa principal antes de invocar función: -20-  
+
Valor de var1 en el programa principal antes de invocar la función: -20-  
Valor de var1 dentro de función --  
+
Valor de var1 dentro de la función: --  
Valor de var1 dentro de función moficada -1-  
+
Valor de var1 dentro de la función, modificado: -1-  
Valor de var1 en progrma principal después de invocar la función: -20-  
+
Valor de var1 en el programa principal después de invocar la función: -20-  
 
</source>
 
</source>
*Sin embargo si quieremos acceder al valor de '''''$var ''''' dentro de la función, sí que podemos
+
*Si queremos acceder al valor de '''''$var1''''' dentro de la función, podemos usar la palabra reservada '''''global''''':
*Hemos de usar la palabra reservada '''''$global'''''
+
 
<source lang=php>
 
<source lang=php>
 
<?php
 
<?php
  
 
function modifica_valor(){
 
function modifica_valor(){
     global $var1; //Indicamos que esta variables se puede globalizar
+
     global $var1; // Indicamos que esta variable se puede usar globalmente.
     echo "Valor de <b>var1</b> dentro de función -$var1- <br /> ";
+
     echo "Valor de <b>var1</b> dentro de la función: -$var1- <br />";
 
     $var1++;
 
     $var1++;
     echo "Valor de <b>var1</b> dentro de función moficada -$var1- <br /> ";
+
     echo "Valor de <b>var1</b> dentro de la función, modificado: -$var1- <br />";
 
}
 
}
  
 
$var1 = 20;
 
$var1 = 20;
  
echo "Valor de <b>var1</b> en programa principal antes de invocar función: -$var1- <br />";
+
echo "Valor de <b>var1</b> en el programa principal antes de invocar la función: -$var1- <br />";
 
modifica_valor();
 
modifica_valor();
echo "Valor de <b>var1</b> en progrma principal después de invocar la función: -$var1- <br />";
+
echo "Valor de <b>var1</b> en el programa principal después de invocar la función: -$var1- <br />";
 
?>
 
?>
 
</source>
 
</source>
*Ahora podemos observar cómo sí que se accede al valor dentro de la función
+
*Ahora, observamos que el valor dentro de la función se puede acceder y modificar.
 
<source lang=bash>
 
<source lang=bash>
Valor de var1 en programa principal antes de invocar función: -20-  
+
Valor de var1 en el programa principal antes de invocar la función: -20-  
Valor de var1 dentro de función -20-  
+
Valor de var1 dentro de la función: -20-  
Valor de var1 dentro de función moficada -21-  
+
Valor de var1 dentro de la función, modificado: -21-  
Valor de var1 en progrma 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>

Revisión de 18:21 5 nov 2024



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

</div>

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-