|
|
(11 revisiones intermedias por el mismo usuario no mostrado) |
Línea 1: |
Línea 1: |
| <div class=slide> | | <div class=slide> |
− | ==Funciones== | + | ==Funciones en php== |
− | <br />
| + | *Para declarar funciones usamos la siguiente sintaxis |
− | {{MRM_Objetivo|
| + | |
− | ;Las funciones es un elemento fundamental
| + | |
− | *Permite crear código modular | + | |
− | *Una forma de estructurar nuestro programa
| + | |
− | }}
| + | |
− | </div>
| + | |
− | | + | |
− | <div class=slide>
| + | |
− | ===Declaración de funciones===
| + | |
| <source lang=php> | | <source lang=php> |
− | function nombreFuncion ($paramFormal1, $paramFormal2 ,...){ | + | function nombre_funcion([tipo]$var1[=valor_por_defecto], ...):[tipo_retorno]{ |
− | //Instrucciones de la función
| + | [instrucciones] |
− | return $valorRetorno //Opcionalmente en caso de que devuelva algún valor la función
| + | [return [expresion]] |
| } | | } |
| </source> | | </source> |
− | | + | *Veremos más sobre funciones más adelante |
− | </div>
| + | *De momento vemos |
− | <div class=slide>
| + | |
− | *Es importante diferenciar entre declarar una función e invocar a una función | + | |
− | *Algo obvio, pero importante
| + | |
− | *En la declaración tenemos tres partes
| + | |
− | #nombre o identificación de funciones
| + | |
− | #parámetros formales entre paréntesis (Estos han de existir, aunque no haya parámetros)
| + | |
− | #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.
| + | |
− | </div>
| + | |
− | | + | |
− | | + | |
− | <div class=slide>
| + | |
− | ;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
| + | |
− | {{Tip|Expresión regular para el identificador de funciones
| + | |
− | '''''[a-zA-Z_f_][a-zA-Z0-9_]*'''''
| + | |
− | }}
| + | |
− | </div>
| + | |
− | <div class=slide>
| + | |
− | ;Parámetros formales
| + | |
− | *Son nombres de variables que usaré 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
| + | |
− | *Una vez que se termina la función estas variables desaparecerán de memoria
| + | |
− | {{MRM_Puntos clave|Title=parámetros formales|
| + | |
− | Los parámetros formales son variables locales a la función}}
| + | |
− | </div>
| + | |
− | | + | |
− | <div class=slide>
| + | |
− | {{MRM_Actividad|Title=Ejercicio usando funciones|
| + | |
− | '''''Haz un programa donde en el programa principal se creen dos variables $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
| + | |
− | *El programa principal
| + | |
− | #asignará valor a las variables
| + | |
− | #las visualizará
| + | |
− | #invocará a la función
| + | |
− | #volverá a visualizar las variables
| + | |
− | }}
| + | |
− | </div>
| + | |
− | <div class=slide>
| + | |
− | *Una posible solución
| + | |
− | <source lang=php> <?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";
| + | |
− | }
| + | |
− | //Ahora considero programa principal
| + | |
− | $a=100;
| + | |
− | $b=200;
| + | |
− | echo "En el main antes de invocar a la función visualizando variables<hr />";
| + | |
− | echo "Valor de variables \$a = $a \$b = $b <br />";
| + | |
− | a($a,$b);
| + | |
− | echo "En el mail después de invocar a la función visualizando variables<hr />";
| + | |
− | echo "Valor de variables \$a = $a \$b = $b <br />";
| + | |
− | ?>
| + | |
− | </source>
| + | |
− | </div>
| + | |
− | | + | |
− | <div class=slide>
| + | |
− | | + | |
− | ===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
| + | |
− | *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
| + | |
− | *En este caso lo que ocurre en realidad es que pasamos la dirección de memoria dónde se guarda el valor.
| + | |
− | *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
| + | |
− | </div>
| + | |
− | | + | |
− | <div class=slide>
| + | |
− | ;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
| + | |
− | <source lang=php>
| + | |
− | function nombre_funcion(&$paramRef1, &$paramRef2, $paramVal1){
| + | |
− | ...
| + | |
− | }
| + | |
− | </source>
| + | |
− | </div>
| + | |
− | | + | |
− | | + | |
− | <div class=slide>
| + | |
− | {{MRM_Actividad|Title=Ejercicio usando funciones parámetros|
| + | |
− | '''''Haz un programa donde en el programa principal se creen dos variables $a y $b y $c'''''
| + | |
− | *Crea una función que reciba como parámetros locales '''''&$num1''''','''''&$num2''''' y '''''$num3'''''
| + | |
− | *La función visualizará el valor de las variables, las modificará y las volverá a visualizar
| + | |
− | *El programa principal
| + | |
− | #asignará valor a las variables
| + | |
− | #las visualizará
| + | |
− | #invocará a la función
| + | |
− | #volverá a visualizar las variables
| + | |
− | }}
| + | |
− | </div>
| + | |
− | <source lang=php>
| + | |
− | | + | |
− | <?php
| + | |
− | function a(&$num1, &$num2, $num3){
| + | |
− | echo "Dentro de la función visibilizando 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";
| + | |
− | }
| + | |
− | //Ahora considero programa principal
| + | |
− | $a=100;
| + | |
− | $b=200;
| + | |
− | $c=300;
| + | |
− | echo "En el main antes de invocar a la función visualizando variables<hr />";
| + | |
− | echo "Valor de variables \$a = $a \$b = $b \$c = $c <br />";
| + | |
− | a($a,$b,$c);
| + | |
− | echo "En el mail después de invocar a la función visualizando variables<hr />";
| + | |
− | echo "Valor de variables \$a = $a \$b = $b \$c = $c <br />";
| + | |
− | ?>
| + | |
− | </source>
| + | |
− | <div class=slide>
| + | |
− | ;Invocando funciones
| + | |
− | *Una vez creada una función la podemos invocar como si fuera una instrucción del lenguaje
| + | |
− | *No sin razón en determinados ambientes se conoce a las funciones y procedimientos como instrucciones virtuales ...
| + | |
− | *En php puedo invocar a una función antes de declararla, siempre que la declare en el mismo fichero
| + | |
− | </div>
| + | |
− | | + | |
− | <div class=slide>
| + | |
− | | + | |
− | | + | |
− | {{MRM_Ejemplo|Title = ejemplo invocación a funciones|
| + | |
− | {{Tip|Este código funcionará correctamente}}
| + | |
− | <source lang=php>
| + | |
− | <?php
| + | |
− | a(5,6);
| + | |
− | /*Mas instrucciones*/
| + | |
− | function a ($a, $b){
| + | |
− | echo "valor de $a";
| + | |
− | echo "valor de $b";
| + | |
− | }
| + | |
− | </source>
| + | |
− | }}
| + | |
− | </div>
| + | |
− | | + | |
− | <div class=slide>
| + | |
− | | + | |
− | {{MRM_Ejemplo|Title = ejemplo invocación a funciones|
| + | |
− | {{Tip|Este código no funcionará }}
| + | |
− | <source lang=php>
| + | |
− | <?php
| + | |
− | a(5,6);
| + | |
− | /*Mas instrucciones*/
| + | |
− | include ("funciones.php");
| + | |
− | ?>
| + | |
− | </source>
| + | |
− | *Contenido del ficheor funciones.php
| + | |
− | <source lang=php>
| + | |
− | <?php
| + | |
− | function a ($a, $b){
| + | |
− | echo "valor de $a";
| + | |
− | echo "valor de $b";
| + | |
− | }
| + | |
− | ?>
| + | |
− | </source>
| + | |
− | }}
| + | |
− | </div>
| + | |
− | | + | |
− | | + | |
− | | + | |
− | <div class="slide">
| + | |
− | ===Variables dentro de una 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
| + | |
− | *Esto también implica que dentro de una función no puedo acceder al valor de una variable definida fuera de la función
| + | |
− | *Observa el siguiente ejemplo
| + | |
− | <source lang=php>
| + | |
− | <?php
| + | |
− | | + | |
− | | + | |
− | function modifica_valor(){
| + | |
− | echo "Valor de <b>var1</b> dentro de función -$var1- <br /> ";
| + | |
− | $var1++;
| + | |
− | echo "Valor de <b>var1</b> dentro de función moficada -$var1- <br /> ";
| + | |
− | }
| + | |
− | | + | |
− | $var1 = 20;
| + | |
− | | + | |
− | echo "Valor de <b>var1</b> en programa principal antes de invocar función: -$var1- <br />";
| + | |
− | modifica_valor();
| + | |
− | echo "Valor de <b>var1</b> en progrma principal después de invocar la función: -$var1- <br />";
| + | |
− | ?>
| + | |
− | </source>
| + | |
− | *Vemos que genera la siguiente salida
| + | |
− | <source lang=bash>
| + | |
− | Valor de var1 en programa principal antes de invocar función: -20-
| + | |
− | Valor de var1 dentro de función --
| + | |
− | Valor de var1 dentro de función moficada -1-
| + | |
− | Valor de var1 en progrma principal después de invocar la función: -20-
| + | |
− | </source>
| + | |
− | *Sin embargo si quieremos acceder al valor de '''''$var ''''' dentro de la función, sí que podemos
| + | |
− | *Ĥemos de usar la palabra reservada '''''$global'''''
| + | |
− | <source lang=php>
| + | |
− | <?php
| + | |
− | | + | |
− | function modifica_valor(){
| + | |
− | global $var1; //Indicamos que esta variables se puede globalizar
| + | |
− | echo "Valor de <b>var1</b> dentro de función -$var1- <br /> ";
| + | |
− | $var1++;
| + | |
− | echo "Valor de <b>var1</b> dentro de función moficada -$var1- <br /> ";
| + | |
− | }
| + | |
− | | + | |
− | $var1 = 20;
| + | |
− | | + | |
− | echo "Valor de <b>var1</b> en programa principal antes de invocar función: -$var1- <br />";
| + | |
− | modifica_valor();
| + | |
− | echo "Valor de <b>var1</b> en progrma principal después de invocar la función: -$var1- <br />";
| + | |
− | ?>
| + | |
− | </source>
| + | |
− | *Ahora podemos observar cómo sí que se accede al valor dentro de la función
| + | |
− | <source lang=bash>
| + | |
− | Valor de var1 en programa principal antes de invocar función: -20-
| + | |
− | Valor de var1 dentro de función -20-
| + | |
− | Valor de var1 dentro de función moficada -21-
| + | |
− | Valor de var1 en progrma principal después de invocar la función: -21-
| + | |
− | </source>
| + | |
− | | + | |
− | ==Funciones propias de php sobre tipos y valores==
| + | |
− | http://php.net/manual/es/ref.var.php
| + | |
− | *Existen una serie (muchas) de funciones que son interesantes de conocer
| + | |
− | *Estas funciones ya están creadas y se pueden usar directamente | + | |
− | *Están relacionadas con los tipos de datos y valores
| + | |
− | *Alguna de ellas son extremadamente útiles y utilizadas, por ejemplo antes de procesar un dato, hay que ver que dicho dato tenga valor.
| + | |
− | *A continuación trataremos alguna de ellas
| + | |
− | </div>
| + | |
− | | + | |
− | <div class="slide">
| + | |
− | ;[http://es1.php.net/manual/es/function.var-dump.php var_dump]
| + | |
− | <source lang=php>
| + | |
− | void var_dump($expresion)
| + | |
− | </source>
| + | |
− | *Nos da información sobre la estructura de un valor resultado de una expresion
| + | |
− | </div>
| + | |
− | | + | |
− | <div class="slide">
| + | |
− | ;[http://es1.php.net/manual/es/function.isset.php isset]
| + | |
− | <source lang=php>
| + | |
− | bool isset ( $variable )
| + | |
− | </source>
| + | |
− | *verifica que una variable tiene valor (está definida y no tiene un valor null)
| + | |
− | <source lang=php>
| + | |
− | <?php
| + | |
− | $VariableValor= 5;
| + | |
− | print ("El valor de la variable es $VariableValor");
| + | |
− | print ("El valor de otra variable es $OtraVariableValor");
| + | |
− | if (isset($VariableValor))
| + | |
− | print ("VariableValor tiene valor asignado");
| + | |
− | else
| + | |
− | print ("VariableValor no no tiene valor asignado");
| + | |
− | if (isset($OtraVariableValor))
| + | |
− | print ("OtraVariableValor tiene valor asignado");
| + | |
− | else
| + | |
− | print ("OtraVariableValor no no tiene valor asignado");
| + | |
− | ?>
| + | |
− | </source>
| + | |
− | </div>
| + | |
− | ===Funciones para determinar existencia de variables===
| + | |
− | Tenemos tres funciones muy parecidas pero no del todo iguales
| + | |
− | | + | |
− | {|class="wikitable" width="98%"
| + | |
− | !
| + | |
− | !Considerations
| + | |
− | |-
| + | |
− | {|class="wikitable" width="60%"
| + | |
− | !Función |Significado
| + | |
− | |-
| + | |
− | |is_null($variable) |Determina si una variable ($variable) tiene valor null
| + | |
− | |-
| + | |
− | |empty($variable) |Determina si una variable ($variables)está vacía
| + | |
− | |-
| + | |
− | |isset($variable) |Determina is una variable ha sido definida y no tiene un valor vacío.
| + | |
− | |}
| + | |
− | | + | |
− | <div class="slide">
| + | |
− | ;[http://es1.php.net/manual/es/function.empty.php empty]
| + | |
− | <source lang=php>
| + | |
− | bool empty ($varriable)
| + | |
− | </source>
| + | |
− | *Determina si una variable no existe. Devuelve true si no existe o su valor está vacío
| + | |
− | </div>
| + | |
− | | + | |
− | <div class="slide">
| + | |
− | {{MRM_Actividad|
| + | |
− | Probamos las fuciones var_dump() que nos da información sobre el valor y el tipo}}
| + | |
− | </div>
| + | |
− | | + | |
− | <div class="slide">
| + | |
− | {{MRM_Actividad|
| + | |
− | Usando la función xxxyyy donde xxx e yyy será dec oct bin o hex para convertir el valor de un sistema numérico a otro}}
| + | |
− | </div>
| + | |
− | | + | |
− | <div class="slide">
| + | |
− | {{MRM_Actividad|
| + | |
− | *Define las siguientes variables que se especifican en el código siguiente y verifica el resultado con empty()
| + | |
− | | + | |
− | <source lang=php>
| + | |
− | $num=0;
| + | |
− | $nombre="";
| + | |
− | $nombre=null;
| + | |
− | $nombre="0";
| + | |
− | $pregunta = FALSE;
| + | |
− | </source>
| + | |
− | }}
| + | |
− | </div>
| + | |
− | | + | |
− | <div class="slide">
| + | |
− | ;[http://es1.php.net/manual/es/function.gettype.php gettype]]
| + | |
− | *Devuelve el tipo de una variable
| + | |
− | <source lang=php>
| + | |
− | string gettype($variable)
| + | |
− | </source>
| + | |
− | </div>
| + | |
− | | + | |
− | <div class="slide">
| + | |
− | ;[http://es1.php.net/manual/es/function.is-bool.phpis_bool][http://es1.php.net/manual/es/function.is-double.php is-double] [http://es1.php.net/manual/es/function.is-int.php is-int], is-xxx
| + | |
− | *son funciones donde xxx especificado en el último nombre, puede ser cualquiera de los tipos
| + | |
− | [[Archivo:funciones_is-xxx.png]]
| + | |
− | </div>
| + | |
− | | + | |
− | <div class="slide">
| + | |
− | *Todas ellas devuelve un booleano que indica si la variable, valor o expresion es o no de ese tipo,
| + | |
− | <source lang=php>
| + | |
− | string is_int($variable);
| + | |
− | string is_double($variable);
| + | |
− | string is_bool($variable);
| + | |
− | string is_integer($variable);
| + | |
− | string is_null($variable);
| + | |
− | string is_string($variable);
| + | |
− | ...
| + | |
− | </source>
| + | |
− | </div>
| + | |
− | | + | |
− | <div class="slide">
| + | |
− | {{MRM_Actividad|
| + | |
− | Visualizar de qué tipo es la expresión mostrada en el código siguiente y visualiza el valor de la expresión}}
| + | |
− | <source lang=php>
| + | |
− | $a=5;
| + | |
− | </source>
| + | |
− | </div>
| + | |
− | | + | |
− | <div class="slide">
| + | |
− | ;[http://php.net/manual/es/function.unset.php unset]
| + | |
− | *Destruye la variable especificada perdiéndose su valor
| + | |
− | void unset ($var)
| + | |
| </div> | | </div> |