Curso Bsico de Programacin en Lenguaje PHP Pgina 1
Realizado por Aythami Jos Melin Perdomo (AngelusGC) IRONCATAN.REDTOTALONLINE.COM
1.I Notacin. Tipos de datos: Como es bien sabido, las variables son piezas bsicas en el juego de la programacin. Se trata del almacn que contiene nuestros datos, y que nosotros etiquetamos con un nombre. Una regla que debemos respetar es la siguiente: todos los nombres de las variables deben empezar con el carcter $. Pero esta no es la nica. Al igual que en otros lenguajes, un nombre vlido de variable puede ser cualquier combinacin de letras y/o nmeros (incluyendo caracteres ASCII del 127 al 255) siempre y cuando el nombre de la variable comience por una letra o por el carcter subrayado. Por tanto, $_MiVariable y $MiVariable son nombres vlidos de variables, pero $3MiVariable no lo es.
A pesar de que al declarar una variable no le estamos asignando un tipo, la variable ser del tipo de dato que le asignemos en cada momento. Esto no significa que no existan los tipos de datos en PHP, s que existen: nmeros enteros (int, integer), nmeros reales (float, real, double), cadenas (string), arrays (array) y objetos (object).
Adems, podemos realizar una conversin de tipo antes de asignar el resultado a una variable, utilizando para ello moldes. Los moldes no son ms que el nombre del tipo entre parntesis, antepuesto a la variable cuyo tipo queremos forzar con el molde. Por ejemplo, si a una variable queremos asignarle un cociente que seguro que tiene decimales, pero slo buscamos su parte entera, bastara con hacer: $Variable = (int)(18/4);
Veamos un sencillo ejemplo de uso de variables: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <HEAD> <TITLE> </TITLE> </HEAD>
<BODY BGCOLOR=white>
<?php
$UnaVariable = "Le asignamos un texto y la mostramos<P>"; echo "Valor de la variable: " . $UnaVariable;
/* Y ahora le asignamos un nmero y lo mostramos tambin */
$UnaVariable = 27; echo "Valor de la variable: " . $UnaVariable;
?>
</BODY> </HTML>
En este ejemplo nos anticipamos un poco al punto de los operadores: como podemos comprobar si ejecutamos el ejemplo, con el punto (.) concatenamos cadenas.
1.II Constantes Una constante es un trozo de memoria que contendr un valor fijo que asignaremos al principio. En PHP, para definir una constante tenemos la funcin: define("CONSTANTE", valor);
Como se ve, el nombre que queramos darle a la constante debe ir entre comillas. Por ejemplo, si queremos definir una constante famosa como el nmero PI, podremos hacer: define("PI", 3.1515926);
dentro de nuestro cdigo PHP. Adems, podremos usar tranquilamente el nombre de esa constante para usar su valor. Por ejemplo, si queremos calcular el valor de 2PI, podremos escribir: $Variable = 2*PI;
sin necesidad de volver a poner el valor de PI, pues lo tenemos definido en una constante.
Por otra parte, antes de usar una constante que no estemos seguros si existe o no, podramos comprobar mediante alguna funcin que est definida. Para ello tenemos la funcin defined, a la que le pasamos como argumento el nombre de la constante, entre comillas, y ella nos dir si est definida o no lo est.
Curso Bsico de Programacin en Lenguaje PHP Pgina 2 Realizado por Aythami Jos Melin Perdomo (AngelusGC) IRONCATAN.REDTOTALONLINE.COM
1.III Funciones para variables Dado que una variable no necesita estar declarada, al contrario de lo que sucede en los lenguajes de programacin usuales como C y Pascal, podra darse el caso de que intentemos acceder al contenido de una variable que no haya sido especificada hasta el momento y que, por tanto, no estar inicializada. Para prevenir posibles errores a consecuencia de este hecho, tenemos una funcin, llamada isset, que nos informa acerca de si la variable que le pasamos como argumento est definida o no. Su sintaxis es: isset(Variable_Cualesquiera);
que devuelve cierto si la variable existe y est definida, y falso si no es as.
Hay una funcin similar a esta que funciona justo al revs, se trata de empty, que nos informa si la variable que le pasamos como argumento est vaca o no definida, en cuyo caso devolver cierto, y si la variable existe y tiene un valor, devolver falso. Su sintaxis es: empty(Variable_Cualesquiera);
Es interesante en ciertas ocasiones verificar si una variable es del tipo que uno espera que sea, para lo que tenemos la familia de funciones is_XXXXXX(Variable). Esta familia est formada por las funciones is_array, is_double, is_float, is_int, is_integer, is_object, is_real, is_string; estas funciones devuelven cierto si la variable pasada como argumento es, en cada una, un array, o un double, o u float, o un int, o un integer, o un object, o un real, respectivamente. En caso contrario, devuelven falso.
Por otra parte, PHP nos ofrece unas funciones que convierten una cadena a entero o a real, y viceversa; estas son: doubleval(VariableCualesquiera); intval(VariableCualesquiera); strval(VariableCualesquiera);Por ejemplo, si hacemos:
$Var1 = "123.4567ert43"; $Var2 = doubleval($Var1); $Var3 = intval($Var1); tendremos en $Var2 almacenado el valor 123.4567, y en $Var3 estar almacenado el valor 123.
Otras funciones de utilidad son estas: settype(VariableCualesquiera, TipoDato); gettype(VariableCualesquiera); unset(VariableCualesquiera);
La primera de ellas nos permite asignar un tipo a una variable. Este tipo ser uno de los comentados, escrito entre comillas a la hora de llamar a la funcin. Por ejemplo, settype($a, "integer"); fijara el tipo de la variable $a a un integer. Adems, devuelve cierto si la conversin ha sido realizada con xito, y falso en caso contrario.
La segunda nos da, en una cadena, el tipo de variable que nosotros le pasamos como argumento.
Por ltimo, con unset podemos eliminar variables que no usemos para evitar gasto innecesario de memoria.
Vamos a resumir todo lo visto hasta ahora con un ejemplo: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <HEAD> <TITLE> </TITLE> </HEAD>
if(isset($Variable89)) print($Variable89); else print("No est asignado valor alguno a \$Variable89<P>");
Curso Bsico de Programacin en Lenguaje PHP Pgina 3 Realizado por Aythami Jos Melin Perdomo (AngelusGC) IRONCATAN.REDTOTALONLINE.COM print("Tipo de la variable \$Variable1: " . gettype($Variable1) . "<BR>"); print("Tipo de la variable \$Variable2: " . gettype($Variable2) . "<P>");
print("Contenido de \$Var1: " . $Var1 . "<BR>"); print("Contenido de \$Var2: " . $Var2 . "<BR>"); print("Contenido de \$Var3: " . $Var3 . "<P>");
if(settype($Var1, "integer")) print("Conversin exitosa de tipo"); else print("No se pudo realizar la conversin");
?>
</BODY> </HTML>
1.IV mbito de las variables Por mbito de una variable suele entenderse aquella parte del cdigo en la que esta variable es visible. En los lenguajes clsicos, el mbito de una variable suele ser el de la funcin o procedimiento en el que se define (una variable local de una funcin no podr ser vista por otra funcin), o bien son variables globales (variables accesibles por cualquier funcin y/o procedimiento). El contenido de las variables permanecer mientras se ejecute la funcin (caso de las locales) o bien durante toda la ejecucin del programa, si se trata de variables globales. En PHP esto no es as, por el motivo siguiente: cuando se ha ejecutado el script y el resultado es devuelto al cliente, el programa ya no est en memoria alguna, as que cuando el programa ha sido interpretado, se ha perdido todo el contenido de las variables que utilizara.
Por este motivo, si queremos usar variables entre varias pginas, debemos pasarlas de unas a otras de forma explcita, incluso cuando se trata de la propia pgina. Lo que s es cierto es que, mientras se est ejecutando el programa en el servidor, existe un mbito para las variables que usamos.
Cada una de las variables existe en el contexto en el que fue definida: bien en el programa principal, bien en una funcin. No obstante, disponemos de unos modificadores que nos permiten alterar este comportamiento: ! global: Nos dice que la variable es global. En este caso, si se utiliza en una funcin, el valor que tenga al finalizar la ejecucin se conservar en el programa principal. ! static: Nos dice que una variable local conservar su valor en sucesivas llamadas a la funcin en la que est definida.
Vamos a matizar el uso de variables globales porque es algo que en PHP queda un poco confuso. Si ests leyendo esto y no sabes nada sobre funciones, te recomiendo que te informes primero de qu es una funcin y cmo se declaran, porque necesito este concepto.
Declarar una variable fuera de cualquier funcin la convierte en global, mientras que si declaramos una variable dentro de una funcin, esa variable es local a la funcin. Ahora bien, si queremos, dentro de una funcin, usar una variable global, tenemos dos posibilidades. La primera es declarar esa variable global como global dentro de la propia funcin; la segunda, usando el array interno $GLOBALS. Vamos a ver un ejemplo de cada una de las opciones para terminar de aclararlo.
Qu pasara con este trozo de cdigo? <?php $aGlobal = '1234';
function Imprime_aGlobal() { echo $aGlobal; }
Imprime_aGlobal(); Curso Bsico de Programacin en Lenguaje PHP Pgina 4 Realizado por Aythami Jos Melin Perdomo (AngelusGC) IRONCATAN.REDTOTALONLINE.COM ?>
Hemos declarado $aGlobal como global, pues est fuera del mbito de cualquier funcin. En otros lenguajes de programacin, el resultado sera que se imprime el valor '1234', pero en PHP no. Por qu? Porque en PHP, una funcin nicamente ve a sus variables locales. Como no se ha declarado previamente, dentro de la funcin Imprime_aGlobal, la variable $aGlobal, sta est sin definir y, por tanto, no tiene valor alguno. Para que la funcin "vea" a las variables globales, es cuando tenemos dos opciones: o volvemos a declarar dentro de la funcin la variable global con el modificador global, o usamos el array $GLOBALS.
Con la primera opcin, el cdigo correcto quedara como sigue: <?php $aGlobal = '1234';
function Imprime_aGlobal() { global $aGlobal; echo $aGlobal; }
Imprime_aGlobal(); ?>
Y con la segunda opcin, tendramos: <?php $aGlobal = '1234';
function Imprime_aGlobal() { echo $GLOBALS["aGlobal"]; }
Imprime_aGlobal(); ?>
El array $GLOBALS es mantenido por el propio intrprete de PHP, y aparte de las variables que nosotros declaremos como globales, tiene muchas otras internas que podeis consultar en el manual en PDF que podeis descargar de la web oficial de PHP.
1.V Tiempo de vida de las variables
Ya hemos comentado que el valor de las variables se pierde en cuanto la pgina es interpretada y el resultado devuelto al cliente. Vamos a ponerlo de manifiesto con un ejemplo: el siguiente programa dar valor a una variable, y la mostrar antes y despus de asignarle este valor. Para probar su efectividad, recargaremos la pgina, y comprobaremos que antes de asignarle un valor, no est definida, puesto que el valor que tuvo se perdi cuando el servidor devolvi la pgina. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <HEAD> <TITLE> Tiempo de vida </TITLE> </HEAD>
<BODY BGCOLOR=white>
<?php
print("Se acaba de cargar la pgina.<BR>". "Tiene asignado valor alguno?<BR>"); if(isset($Variable)) print("S tiene un valor asignado, ".$Variable."<P>"); else print("<DIV ALIGN=RIGHT>No tiene un valor asignado</DIV><P>");
$Variable = 12; print("Ahora le asignamos un valor. La variable vale: ". $Variable."<P>");
?>
</BODY> </HTML>
Veremos cmo solucionar este problema, pues es posible pasar el valor de las variables entre pginas, incluyndose a s misma.
1.VI Variables variables
Las variables variables son una caracterstica muy interesante de PHP. La idea es la siguiente: imaginad que Curso Bsico de Programacin en Lenguaje PHP Pgina 5 Realizado por Aythami Jos Melin Perdomo (AngelusGC) IRONCATAN.REDTOTALONLINE.COM tenemos una variable cuyo valor sea una cadena que formara un nombre vlido de variable. Podramos usar esta cadena como nombre para otra variable. Cmo?
Vamos a suponer que tenemos una variable con el siguiente contenido: $MiVariable = 'UnValor'; Si ahora hacemos esto: $$MiVariable = 'Qu ser, ser'; Podemos, por ejemplo, escribir la sentencia: echo $MiVariable . ' - ' . $UnValor; El resultado ser que se imprimir la cadena: UnValor - Qu ser, ser
Ahora he de comentar una nota para resolver una posible ambigedad. Para ello, he de tocar el tema de los arrays. Si no sabes qu es un array, entonces espera a llegar a ese apartado para volver aqu. Si ya has trabajado con arrays, puedes seguir leyendo.
Imaginemos que tenemos un array llamado UnArray, y que en la posicin 1 del array tenemos: $UnArray[1] = 'OtroNombre'. Entonces, qu es $$UnArray[1]?. Porque puede ser que OtroNombre sea otro array, con lo que el intrprete no sabra qu hacer. Para resolver la posible ambigedad, entenderemos que ${$UnArray[1]} es una variable simple, la variable $OtroNombre, mientras que ${$UnArray}[1] es lo mismo que escribir $OtroNombre[1], es decir, en este caso $OtroNombre resultara ser otro array y estamos accediendo a su primer elemento.
2.I Operadores: qu son Los operadores son smbolos que denotan operaciones que pueden realizarse entre elementos llamados operandos. Si tenemos un operador, lase # (por no poner uno conocido que confunda), que sabe operar con dos operandos, entonces $a # $b debe entenderse como el resultado de operar $a con $b segn lo que indique la operacin #. Por ejemplo, + es un operador que admite dos operandos y tal que el resultado de hacer $a + $b es el resultado de sumar $a y $b.
El operador ms bsico es el operador binario de asignacin, =. Si escribimos en el cdigo $a = $b, estamos asignando a $a el contenido de $b en ese momento. Curso Bsico de Programacin en Lenguaje PHP Pgina 6 Realizado por Aythami Jos Melin Perdomo (AngelusGC) IRONCATAN.REDTOTALONLINE.COM
Veamos un ejemplo: <HTML> <HEAD></HEAD> <BODY> <?php
$a = 4; $b = 3;
echo 'Valor de a: ' . $a . '<BR>Valor de b: ' . $b . '<P>';
$a = $b;
echo 'Valor de a: ' . $a . '<BR>Valor de b: ' . $b;
?> </BODY> </HTML> En el ejemplo podemos ver tambin el uso del operador .. Resulta que cuando estamos utilizando cadenas, el operador . tiene el significado "concatenacin". Por ejemplo, si escribimos $Cadena = "Suma" . " de " . "cadenas"; es lo mismo que si hubiramos escrito $Cadena = "Suma de cadenas";
2.II Operadores: aritmticos Los operadores aritmticos son binarios (necesitan dos operandos), y realizan sobre sus operandos alguna de las operaciones aritmticas conocidas. En concreto, tenemos: + Suma - Resta * Producto / Cociente % Mdulo En PHP tenemos una versin especial, heredada del lenguaje C, que junta el operador de asignacin con los vistos aqu: += $b += 3 equivale a $b = $b + 3 -= $b -= 3 equivale a $b = $b - 3 *= $b *= 3 equivale a $b = $b * 3 /= $b /= 3 equivale a $b = $b / 3 %= $b %= 3 equivale a $b = $b % 3 Adems, heredados tambin del lenguaje C, tenemos los incrementos y decrementos: ++ y --. Notar que, si tenemos definidas dos variables, por ejemplo $Variable1 y $Variable2, no es lo mismo hacer esto: $Variable2 = 20; $Variable1 = $Variable2++; que hacer esto: $Variable2 = 20; $Variable1 = ++$Variable2; pues en el primer caso se realiza primero la asignacin y despus el incremento (con lo que tendremos que $Variable1=20, $Variable2=21); en el segundo caso se realiza primero el incremento y despus la asignacin, as que ambas valdran lo mismo.
Por ltimo, dentro de los operadores aritmticos tenemos el operador unario -, que aplicado delante de una variable, le cambia el signo.
A continuacin vemos algunos ejemplos de operaciones y su resultado: <HTML> <HEAD></HEAD> <BODY>
<?php
/* Partimos de dos variables, '$a' y '$b', y vamos a realizar distintas operaciones con ellas */
$a = 10; $b = 6;
echo 'a = ' . $a . ', b = ' . $b . '<P>'; echo 'a + b = ' . ($a + $b) . '<BR>'; echo 'a - b = ' . ($a - $b) . '<BR>'; echo 'a * b = ' . ($a * $b) . '<BR>'; echo 'a / b = ' . ($a / $b) . '<BR>'; Curso Bsico de Programacin en Lenguaje PHP Pgina 7 Realizado por Aythami Jos Melin Perdomo (AngelusGC) IRONCATAN.REDTOTALONLINE.COM echo 'a % b = ' . ($a % $b) . '<BR>'; echo 'a++ : ' . ($a++) . '<P>';
/* Notar que aqu ya se ha incrementado '$a' */
echo '-a = ' . (-$a) . '<P>';
echo 'a += b : a = ' . ($a += $b) . '<BR>'; echo 'a %= b : a = ' . ($a %= $b) . '<BR>';
?>
</BODY> </HTML>
2.III Operadores: comparacin Los operadores de comparacin son binarios y su resultado es un booleano (un valor de verdad). Nos permiten expresar si una relacin de igualdad/desigualdad es cierta o falsa dados los operandos. Tenemos los siguientes: == igual != distinto > mayor que < menor que >= mayor o igual que <= menor o igual que === igual en valor y tipo (PHP 4) Veamos un sencillo ejemplo para aclarar conceptos: <HTML> <HEAD></HEAD> <BODY>
<?php
/* Partimos de dos variables, '$a' y '$b', y vamos a realizar distintas operaciones con ellas */
$a = 10; $b = 6;
echo 'a = ' . $a . ', b = ' . $b . '<P>';
echo 'a == b : ' . ($a == $b) . '<BR>'; echo 'a != b : ' . ($a != $b) . '<BR>'; echo 'a < b : ' . ($a < $b) . '<BR>'; echo 'a > b : ' . ($a > $b) . '<BR>'; echo 'a <= b : ' . ($a <= $b) . '<BR>'; echo 'a >= b : ' . ($a >= $b) . '<P>';
$a = 6; echo 'Ahora a = ' . $a . ' (tipo: ' . gettype ($a) . ')<BR>'; echo ' a === b : ' . ($a === $b);
?>
</BODY> </HTML>
2.IV Operadores: lgicos Los operadores lgicos sirven para componer condiciones ms simples por medio de las reglas de la y, o y no lgicas. Nos permiten expresar condiciones compuestas de las que queremos averiguar su valor de verdad. && (and) AND ('y' lgica) || (or) OR ('o' lgica) ! NOT ('no' lgica) xor XOR ('o exclusiva' lgica) Por ejemplo, si tenemos tres nmeros, podemos querer saber si el primero es a la vez mayor que el segundo y el tercero, o si es mayor que alguno de ellos, o si no es mayor que ninguno. Con el adecuado uso de parntesis, podemos agrupar como nos convenga las condiciones.
Veamos un ejemplo: <HTML> <HEAD></HEAD> <BODY>
<?php Curso Bsico de Programacin en Lenguaje PHP Pgina 8 Realizado por Aythami Jos Melin Perdomo (AngelusGC) IRONCATAN.REDTOTALONLINE.COM
/* Partimos de tres variables, 'a', 'b' y 'c', y vamos a realizar distintas operaciones con ellas */
$a = 10; $b = 6; $c = 11;
echo 'a = ' . $a . ', b = ' . $b . ', c = ' . $c . '<P>';
echo '(a > b) && (a > c) : ' . (($a > $b) && ($a > $c)) . '<BR>'; echo '(a > b) && (a < c) : ' . (($a > $b) && ($a < $c)) . '<BR>'; echo '!(a < b) : ' . !($a < $b) . '<BR>'; echo '(a > b) || (a > c) : ' . (($a > $b) || ($a > $c)) . '<BR>';
?>
</BODY> </HTML> La primera comparacin nos dice si '$a' es mayor que '$b' y a la vez mayor que '$c'. La segunda, si '$a' es mayor que '$b' y a la vez menor que '$c'. La tercera nos dice si no se cumple que '$a' sea menor que '$b'. La cuarta nos dice si '$a' es mayor que '$b' o bien '$a' es mayor que '$c'.
3.I Estructuras de control: Condicionales Dentro de las sentencias de control de flujo nos encontramos con las condicionales. Este tipo de sentencias sirven para hacer UNA u OTRA cosa en funcin de una cierta condicin.
En la vida real, un condicional sera algo del tipo "si llueve coger el paraguas y si no llueve me pondr camisa"; en PHP, los condicionales son como los de C: <?php if (condicion) { Codigo_Si_Se_Cumple } else { Codigo_Si_No_Se_Cumple } ?> Si 'condicion' es evaluado como 'true' (verdadero), entonces se ejecuta el cdigo que hay a continuacin del 'if', y si es evaluado como 'false' (falso), se ejecuta el cdigo que hay a continuacin del 'else'. No es necesario poner siempre el 'else', puede ser que slo queramos ejecutar unas acciones si sucede ALGO, pero nos de igual si ALGO no sucede. Adems, los 'if' pueden estar anidados segn la complejidad del programa. Veamos un ejemplo: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <HEAD> <TITLE> Ejemplos con condicionales </TITLE> </HEAD>
<BODY BGCOLOR=white>
<?php
$a = 3; Curso Bsico de Programacin en Lenguaje PHP Pgina 9 Realizado por Aythami Jos Melin Perdomo (AngelusGC) IRONCATAN.REDTOTALONLINE.COM
switch($a) { case 1: print("Es la opcin 1<BR>"); break; case 2: print("Es la opcin 2<BR>"); break; case 3: print("Es la opcin 3<BR>"); $a--; break; default: print("No hay opciones<BR>"); break; }
print("Valor de \$a: $a");
?>
</BODY> </HTML> Qu caso se ejecutar, y qu valor tendr al final la variable $a?
3.II Estructuras condicionales: Bucles Los bucles nos van a servir para repetir un cierto nmero de veces las acciones que queramos ejecutar varias veces. En PHP tenemos los siguientes bucles: for(Inicializacion; Condicion; Actualizacion) { Codigo_a_Repetir } Se trata del for del lenguaje C, por tanto: ! Inicializacion es la inicializacin necesaria para comenzar el bucle, y se ejecuta al empezar. ! Condicion es la condicin que se evalua antes de cada iteracin; la iteracin se realizar si la condicin ha sido evaluada a cierto. ! Actualizacion es la posible actualizacin de las variables tras cada iteracin. Es ejecutada una vez finaliza cada iteracin. Por ejemplo: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML> <HEAD> <TITLE> Ejemplo con bucle for </TITLE> </HEAD>
<BODY BGCOLOR=white>
<?php
print("Cuenta atrs...<P>"); $a = 10;
for(; $a >= 0; $a--) print("\$a = $a<BR>");
?>
</BODY> </HTML> Notar que he puesto la inicializacin fuera del for. De hecho, ni la inicializacin ni la condicin ni la actualizacin son obligatorias, podramos perfectamente escribir for(;;), pero eso s, hay que saber que, al no haber condicin, el bucle se ejecutar siempre, por lo que escribir algo tan simple como for(;;); realizar un bucle infinito.
PHP tambin dispone de las estructuras while y do-while, cuya estructura es como la del lenguaje C y que exponemos brevemente: while(Condicion) { Codigo_a_Repetir }
do { Codigo_a_Repetir } while(Condicion); Podemos romper cualquiera de los bucles si, en un momento dado, quiz bajo una condicin dada por if, escribimos la sentencia break.