Diferencia entre revisiones de «Plantilla:ManuelRomero/PHP/funciones»
De WikiEducator
(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 | + | ;Las funciones son un elemento fundamental |
− | * | + | *Permiten crear código modular. |
− | * | + | *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 | + | *Es importante diferenciar entre **declarar** una función e **invocar** una función. |
− | * | + | *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 |
− | ; | + | ;Parámetros formales |
− | *Se especifican entre | + | *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 ( | + | *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. |
− | # | + | #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. |
</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 | + | * 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 | + | *Son nombres de variables que usaremos al escribir el código o cuerpo de la función. |
− | *El nombre | + | *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. |
− | {{MRM_Puntos clave|Title= | + | {{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=== | ||
− | ; | + | ;Primero, declaramos la función |
− | *Esto implica | + | *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 | + | *Estas acciones estarán definidas en función de los **parámetros formales** de la declaración. |
− | + | ||
[[Archivo:declaracion_funcion.png]] | [[Archivo:declaracion_funcion.png]] | ||
− | ;Invocación de función | + | ;Invocación de la 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 ocurre es que el programa accede a esa zona de memoria. |
[[Archivo:invocacion_funcion_2.png]] | [[Archivo:invocacion_funcion_2.png]] | ||
− | * | + | *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]] | ||
− | * | + | *Cuando la función termina de ejecutarse, se retorna a la instrucción que sigue a la llamada. |
− | *Si la función devuelve | + | *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| | ||
− | ''''' | + | '''''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 | + | *La función debe visualizar el valor de las variables, modificarlas, y volver a visualizarlas. |
− | * | + | *En el programa principal: |
− | # | + | #Asigna valor a las variables. |
− | # | + | #Visualízalas. |
− | # | + | #Invoca la función. |
− | # | + | #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"; | ||
} | } | ||
− | // | + | //Programa principal |
− | $a=100; | + | $a = 100; |
− | $b=200; | + | $b = 200; |
− | echo "En el main antes de invocar | + | 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 | + | 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=== | ||
− | * | + | *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 | + | *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. |
</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 | + | 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| |
− | ''''' | + | '''''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 | + | *Crea una función que reciba como parámetros '''''&$num1''''', '''''&$num2''''' y '''''$num3'''''. |
− | *La función | + | *La función debe visualizar el valor de las variables, modificarlas, y volver a visualizarlas. |
− | * | + | *En el programa principal: |
− | # | + | #Asigna valor a las variables. |
− | # | + | #Visualízalas. |
− | # | + | #Invoca la función. |
− | # | + | #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 | + | 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"; | ||
} | } | ||
− | // | + | //Programa principal |
− | $a=100; | + | $a = 100; |
− | $b=200; | + | $b = 200; |
− | $c=300; | + | $c = 300; |
− | echo "En el main antes de invocar | + | 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 | + | 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 | + | *Una vez creada una función, se puede invocar como si fuera una instrucción. |
− | *No sin razón en | + | *No sin razón, en ciertos contextos se refiere a funciones como "instrucciones virtuales". |
− | *En | + | *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 = | + | |
{{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); |
− | /* | + | /*Más instrucciones*/ |
− | function a ($a, $b){ | + | function a($a, $b){ |
− | echo " | + | echo "Valor de $a"; |
− | echo " | + | echo "Valor de $b"; |
} | } | ||
</source> | </source> | ||
Línea 191: | Línea 185: | ||
<div class=slide> | <div class=slide> | ||
− | {{MRM_Ejemplo|Title = | + | {{MRM_Ejemplo|Title=Ejemplo de invocación de funciones| |
− | {{Tip|Este código no | + | {{Tip|Este código no funcionará}} |
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
− | a(5,6); | + | a(5, 6); |
− | /* | + | /*Más instrucciones*/ |
include ("funciones.php"); | include ("funciones.php"); | ||
?> | ?> | ||
</source> | </source> | ||
− | *Contenido del | + | *Contenido del archivo funciones.php |
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
− | function a ($a, $b){ | + | function a($a, $b){ |
− | echo " | + | echo "Valor de $a"; |
− | echo " | + | 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 | + | *No se puede acceder a su valor fuera de la función. |
− | *Esto también implica que dentro de una función no | + | *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 | + | 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 | + | echo "Valor de <b>var1</b> en el programa principal después de invocar la función: -$var1- <br />"; |
?> | ?> | ||
</source> | </source> | ||
− | * | + | *Genera la siguiente salida: |
<source lang=bash> | <source lang=bash> | ||
− | + | 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 | + | Valor de var1 dentro de la función, modificado: -1- |
− | Valor de var1 en | + | Valor de var1 en el programa principal después de invocar la función: -20- |
</source> | </source> | ||
− | * | + | *Si queremos acceder al valor de '''''$var1''''' dentro de la función, podemos usar la palabra reservada '''''global''''': |
− | + | ||
<source lang=php> | <source lang=php> | ||
<?php | <?php | ||
function modifica_valor(){ | function modifica_valor(){ | ||
− | global $var1; //Indicamos que esta | + | 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 | + | 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 | + | echo "Valor de <b>var1</b> en el programa principal después de invocar la función: -$var1- <br />"; |
?> | ?> | ||
</source> | </source> | ||
− | *Ahora | + | *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 | + | Valor de var1 dentro de la función, modificado: -21- |
− | Valor de var1 en | + | 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
|
</div>
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 />"; ?>