martes, 15 de enero de 2008

3. Variables PHP. Mi primer PHP

Vamos a dedicar esta entrada a las variables en PHP y finalizaremos creando nuestro primer PHP. En primer lugar, ¿qué es una variable? Una variable podríamos definirla como un nombre simbólico que toma un valor concreto. Para aclarar esta definición:

•  Un número entero (0, 1, 2) es tal número de por sí y para siempre (el 1 no va a ser nunca el 2).

•  Una variable que llamemos, por ejemplo, mi_numero, contiene un valor (por seguir con el ejemplo, un valor entero) y puede cambiarse asignándole otro valor. Así, la sentencia:

•  mi_numero = 1 hace que la variable mi_numero, al ser consultada, diga que toma valor 1.

•  mi_numero = 1 + 5 hace que la variable tome el valor 6.

•  Etc etc

Pero una variable puede ser de distintos tipos, no tiene por qué ser siempre un número. Así pues, ¿qué tipos de variables nos podemos encontrar en PHP? Generalizando muy mucho, los tipos más comunes son:

•  Tipos simples: Entero, Flotante, Carácter, Booleano.

•  Tipos compuestos: Arrays, Cadena de Caracteres.

Tipos Simples:

•  Entero: valor numérico (positivo o negativo) sin decimales (-10, 0, 1, 100.000, ...).

•  Flotante: valor numérico (positivo o negativo) con decimales (15.45, -20.1895, ...).

•  Carácter: valor alfanumérico determinado por una tabla de códigos conversora (generalmente, ASCII). Para entendernos y generalizando mucho, una letra o símbolo de nuestro teclado (‘a', ‘b', ‘C', ‘-‘, ‘+', ...). Observa que he utilizado un entrecomillado simple (‘) porque así es como se utilizará luego al programar en PHP.

•  Booleano: es un valor sí ó no, como si de un interruptor se tratase. En PHP se utilizan los valores true o false (verdadero o falso).

Tipos Compuestos:

•  Array (vector, matriz): sobre arrays se podría dedicar un tema entero a hablar de ellos. Un array es una colección de objetos referenciada bajo un único nombre. Todos los objetos que contiene son del mismo tipo. Podemos hablar de un array de enteros, un array de flotantes, de caracteres, etc. Por ejemplo, supongamos que queremos almacenar la combinación de la lotería primitiva. En dicho caso, podríamos utilizar una variable llamada “primitiva”, de tipo array, que contuviera los valores de este modo:

•  primitiva[0] = 10;

•  primitiva[1] = 12;

•  primitiva[2] = 20;

•  primitiva[3] = 29;

•  primitiva[4] = 41;

•  primitiva[5] = 47;

Observa que aparecen los símbolos “[“ y “]”. Estos sirven para indicar, dentro del array, qué posición queremos acceder. Así, primitiva[0] es una referencia al primer elemento del array, primitiva[1] al segundo elemento, etc. Lo que hemos hecho con el código anterior es asignar a los 6 primeros elementos del array los 6 valores de la combinación ganadora (10, 12, 20, 29, 41 y 47).

Existe la posibilidad, en PHP, de asignar a cada elemento del array un valor de distinto tipo. O sea, que en la primera posición tengas un entero, en la segunda un carácter, etc etc. Esto, que a priori parece algo muy simple, no te lo permiten la mayoría de los lenguajes de programación a no ser que crees tu propia estructura de datos. En PHP no es necesario disponer de estructuras de datos como un tipo aparte al disponer de esta funcionalidad. Piensa, por ejemplo, que dispones de una variable “pedido” que simboliza el pedido de un cliente, y le asignas estos valores:

•  pedido[0] = “15/01/2008”;

•  pedido[1] = “maleta”;

•  pedido[2] = 2;

Si a la hora de programarlo piensas: “en la primera posición siempre voy a guardar la fecha, en la segunda el nombre de producto y en la tercera la cantidad pedida...” este array cobra sentido, ¿verdad? Y fíjate que mientras que las dos primeras posiciones son del tipo cadena de caracteres (ahora veremos más en detalle qué son) la última, la cantidad, es de tipo numérico.

•  Cadena de Caracteres: Una combinación de caracteres alfanuméricos. Por ejemplo, “hola, esto es una cadena” sería una cadena de caracteres (observa que he usado el entrecomillado doble (“) para delimitarla). También se podría dedicar otro capítulo entero para hablar de la manipulación de cadenas de caracteres. Como peculiaridad, indicar que una cadena de caracteres es un subtipo del tipo array más una serie de propiedades añadidas. Así, el siguiente trozo de código:

•  mi_cadena=”Hola Soy una Cadena”;

•  mi_cadena[0] = ‘P';

Es perfectamente válido. En la primera sentencia he asignado a una variable llamada “mi_cadena” el valor “Hola Soy una Cadena”. En la siguiente sentencia, he modificado el primer carácter de la cadena dándole el valor “P”. Si ahora consultásemos el valor de “mi_cadena”, el resultado sería “Pola Soy una Cadena”. Es decir, los elementos de una cadena de caracteres pueden referenciarse como si de un array de caracteres estuviéramos hablando.

Sintaxis de las variables en PHP
Bien, ya sabemos (o nos hemos hecho una idea) de los tipos básicos que hay en PHP de variables. ¿Cómo utilizar una variable en PHP?

Las variables en PHP van antecedidas del símbolo $. Así,

•  $numero = 5; hace que se cree la variable numero y se le asigne valor 5.

•  $numero[0] = ‘K'; hace que se cree un array llamado numero y a su primera posición se le asigne el valor ‘K';

Tradicionalmente, los lenguajes de programación nos “exigen” que declaremos explícitamente el tipo de la variable (esto es, si va a contener un entero, si va a contener un booleano...) o incluso, cuando hablamos de tipos de datos complejos, preasignar la memoria que pueden ocupar dentro de tu ordenador . Con PHP no es necesario nada de lo anterior, el mero hecho de referenciar una variable con el símbolo $ antecediéndole ya “provoca” tanto la creación de la variable como la asignación de memoria. PHP es, como que se suele llamar en tecnologías de la información, un lenguaje débilmente tipado, ya que no requiere conocer explícitamente el tipo de las variables a utilizar. Las ventajas son enormes, no sólo por no tener que gestionar el espacio de memoria sino por el hecho de poder crear y asignar variables en el momento que se necesiten sin tener que acordarte de los tipos ni de su nomenclatura. Además, PHP te permite hacer cosas como:

•  $numero = 5;

•  $numero = “hola”;

Donde, en la primera sentencia, hemos creado una variable numero y le hemos dado valor 5 y, acto seguido, a esa misma variable le hemos asignado el valor “hola”, que como sabemos es una cadena de caracteres que requiere distinto almacenamiento que un número y cuya filosofía de uso y operaciones permitidas son distintas a las del tipo entero.

La principal contra de este uso de variables es que un error en el nombre de una variable NO SE DETECTA DIRECTAMENTE. Por ejemplo, en un lenguaje fuertemente tipado, como C, si hacemos:

•  int numero = 5;

•  numro = 6;

El lenguaje nos dará un error porque la variable numro no existe (existe numero, pero al escribirlo de nuevo nos comimos la “e”).

Con PHP, sin embargo:

•  $numero = 5;

•  $numro = 6;

Provoca la creación de dos variables, numero y numro. Si posteriormente hacemos referencia a la variable numero pensando que su valor es 6, habremos cometido un error y sólo lo detectaremos revisando el código.

Nuestro primer PHP

Bien, ya es hora de entrar en faena. Como en todos los libros de programación, comenzaremos por el programa más sencillo (en este caso, la web más sencilla). El clásico “Hola Mundo”. Su objetivo no es más que mostrar, en pantalla, ese texto, “Hola Mundo”.

Como estamos tratando con páginas web, el contenido debe estar incluido dentro del formato de una página web. O sea, nuestro PHP debe generar un HTML cuando queramos visualizar algo en pantalla (esto es una máxima aplicable a cualquier página web que utilice lenguaje de servidor).

La estructura más simple que contiene una página web es:

<HTML>

<HEAD>

</HEAD>

<BODY>

</BODY>

</HTML>

Desglosando un poco:

•  Toda marca del lenguaje HTML va encerrada entre los símbolos “<” y “>”.

•  Las marcas de HTML constituyen bloques que se abren y se cierran. Por ejemplo, <HTML> indica que estamos iniciando una página HTML y </HTML> indica el cierre de la misma.

•  Un bloque puede contener más bloques. Por ejemplo, el bloque <HTML> contiene los bloques <HEAD> y <BODY>

•  La sección HEAD de toda página HTML contiene información relativa a la página que no es visible en el navegador (o, al menos, para visualizarla se nos requiere que consultemos explícitamente, dentro de nuestro navegador, información sobre la página) salvo la sección TITLE, que se utiliza para darle un título a la página (el título que aparece en la barra superior de la ventana del navegador).

•  La sección BODY es el cuerpo de la página, aquellos datos, estructuras, secciones, etc que deseemos mostrar.

Sólo con esto, ya tenemos una página en formato HTML (por supuesto, en blanco, no muestra nada, pero el navegador “la comprende”). Si queremos incluir código PHP, lo debemos hacer entre las marcas “<?” para iniciarlo y “?>” para finalizarlo (sin las comillas.

Nuestro “Hola Mundo” en PHP sería algo como lo siguiente:

<html>

<head>

<title>Cap 3, ejemplo 1</title>

</head>

<body>

<? echo "Hola Mundo"; ?>

</body>

</html>



No es difícil ver que hemos agregado la sección Title dentro de Head para darle título a la página (si no la incluimos, mostrará “Documento sin título” en la barra superior), así como que hemos agregado una sección con código PHP:

<? echo “Hola Mundo”; ?>



¿Qué hemos hecho aquí? Hemos utilizado una función de PHP, echo , que sirve para mostrar algo. Fíjate que todas las sentencias de PHP finalizan con el carácter “;” . La función echo de PHP siempre “espera” que se le indique un parámetro que debe mostrar. ¿Cómo lo muestra? Incluyendo el resultado del parámetro dentro del HTML que después devolverá. El PHP anterior generaría, por ejemplo, este HTML para nuestro navegador:

<html>

<head>

<title>Cap 3, ejemplo 1</title>

</head>

<body>

Hola Mundo

</body>


</html>



El resultado de la cadena “Hola Mundo” es precisamente ese texto, así que lo incluye como resultado de la sección PHP que habíamos creado.

Cualquier persona puede decir: “bueno, pero para eso no necesito hacer un PHP. Hago la página resultante y ya he acabado”. Y es muy cierto. Para el ejemplo anterior no hace falta PHP puesto que con contenido estático HTML ya lo podríamos haber creado. Pero ahora, analicemos el siguiente PHP:

<html>

<head>

<title>Cap 3, ejemplo 2</title>

</head>

<body>

<?

$frase = rand(0,2);



if ($frase == 0) echo "Hola Mundo";

if ($frase == 1) echo "Hola Continente";

if ($frase == 2) echo "Hola Ciudad";

?>


</body>

</html>



Aquí hay elementos que aún no hemos comentado. Aunque los discutiremos, basta indicar, para comprender el ejemplo, que:

•  Rand (mínimo, máximo) es una función que devuelve un número aleatorio entre el mínimo y máximo que se le indique.

•  If es una sentencia condicional. Evalúa la condición que se le indique. Si es cierta, ejecuta las sentencias que se le indiquen.

•  Cuando decimos $frase == número estamos haciendo una comparación (poner == en PHP equivale a decir “si lo de la izquierda es igual a lo de la derecha“).

¿Qué hace este PHP?

•  Crea la variable $frase y le asigna un valor aleatorio entre 0 y 2.

•  Si la variable $frase vale 0, muestra la cadena “Hola Mundo”.

•  Si la variable $frase vale 1, muestra la cadena “Hola Continente”.

•  Si la variable $frase vale 2, muestra la cadena “Hola Ciudad”.

El resultado HTML puede variar CADA VEZ QUE LLAMES A LA PÁGINA por lo que sabemos que será una de las tres combinaciones pero cada vez que accedas a este PHP el resultado será distinto.

Puedes probar los dos ejemplos en estas direcciones:

Primer ejemplo: Ejemplo c3-e1

Segundo ejemplo: Ejemplo c3-e2

Actualización 28/01/2014: Os dejo los ficheros fuente php de este capítulo en este zip por si los queréis descargar y verlos directamente: Fuentes Capítulo 3

5 comentarios:

Pedro dijo...

Muy bueno me quedo todo claro, lo fui probando con el programa xammp desde mi pc y me resulto bien. Gracias!

Jondalar dijo...

Es FANTASTICO lo bien que explicas, jamas he programado en ningun lenguaje y me está resultando hasta facil jejeje.

Muchisimas Gracias por todo, sigue asi.

Memoes dijo...

Excelente. bastante claro,, muy bien los ejemplos a prueba de tontos. muchísimas gracias y felicidades. ojalá hubiera sitios como éstos para todo.

Anónimo dijo...

Gracias por la aportación

Anónimo dijo...

Bueniiisiimas sus explicaciones! ojala sigas publicando mas! felicitaciones