Capítulo 2. El lenguaje PHP.
Cuando solicitamos una página HTML con el siguiente código:
<HTML>
<BODY>
Contenido de una página1 HTML
</BODY>
</HTML>
el servidor nos devolverá el contenido del fichero tal cual, es decir, sin realizarle ninguna modificación (ver Figura: 1):
<HTML>
<BODY>
Contenido de una página HTML
</BODY>
</HTML>
Pero si solicitamos una página PHP con el siguiente código:
<HTML>
<BODY>
<?PHP
print(«Contenido de una página PHP»);
?>
</BODY>
</HTML>
el servidor nos devolverá el contenido del fichero después de haber interpretado el código PHP (ver Figura: 2):
<HTML>
<BODY>
Contenido de una página PHP
</BODY>
</HTML>
¿Qué ventajas nos aporta esto?
– Podremos hacer páginas dinámicas, en las cuales el contenido variará según nuestras necesidades.
– Siempre enviaremos código HTML al cliente (es decir, al ordenador que ha realizado la petición de la página), de esta forma el explorador del cliente sólo deberá saber interpretar el HTML.
Tras esta breve introducción al lenguaje PHP en la que hemos recordado su funcionamiento pasaremos a ver el lenguaje PHP propiamente dicho.
Como ha podido verse anteriormente el código PHP se inserta dentro de una página HTML, pero dicho fichero deberá tener la extensión «PHP» para que el servidor sepa que ha de interpretarla antes de enviarla al cliente. (Es posible configurar el PHP para que interprete también las páginas HTML, pero es conveniente que no mezclemos estos dos tipos de páginas).
Podemos indicar que el código que viene a continuación es PHP de varias formas, pero la más común es la siguiente:
<?PHP
código PHP…
?>
Otras características del PHP son las siguientes:
– Las instrucciones se separan con un «punto y coma» ( ; ) que normalmente se pone al final de cada instrucción.
– PHP es sensible a las mayúsculas/minúsculas, es decir, que no es lo mismo para PHP «hola» que «Hola» ni que «HOLA» ni que…
– Los comentarios se pueden poner de dos formas:
- Si ponemos dos barras ( // ) estamos indicando que lo que hay a continuación hasta el final de la línea es un comentario.
- Si ponemos una barra y un asterisco ( /* ) estamos indicando que lo que hay a continuación es un comentario hasta que aparezca un asterisco y una barra ( */ ) independientemente del número de líneas y de la cantidad de texto que haya en medio.
Como puede observarse la sintaxis de PHP es muy parecida al lenguaje de programación C.
Ya se ha comentado que el PHP es un lenguaje interpretado, que el servidor transforma antes de enviar al ordenador cliente que realizó la petición, por lo que vamos a ver ahora una de las funciones más importantes que nos permitirá realizar esa transformación.
Para ello vamos a usar las órdenes «echo» y «print» que nos convertirán lo que le indiquemos en cadenas de texto HTML. Obsérvese que se escriben en minúsculas.
Veamos nuevamente el ejemplo anterior (podemos usar indistintamente «print» o «echo»):
<HTML>
<BODY>
<?PHP
// Ejemplo de la orden «print»
print(«Contenido de una página PHP«);
?>
</BODY>
</HTML>
se transformará en el siguiente código HTML:
<HTML>
<BODY>
Contenido de una página PHP
</BODY>
</HTML>
Algunos comentarios sobre el ejemplo anterior:
– Podemos observar las marcas de inicio y fin de código PHP:
- Al principio: <?PHP
- Al final: ?>
– También tenemos una línea de comentarios indicada con las dos barras.
– En la línea que contiene la orden «print» vemos que al final aparece el «punto y coma» ( ; ) para indicar que ahí acaba la orden.
– Es aconsejable el «identado» del código, es decir, cada vez que tengamos un grupo de instrucciones dentro de otras ponerlas varios espacios más a la derecha para que visualmente se vea están dentro. Por ejemplo, el código PHP está dentro del apartado «BODY» del HTML y por eso se ha situado dos espacios más a la derecha. De la misma forma que el apartado «BODY» está dentro del «HTML» y también se ha desplazado dos espacios a la derecha.
– Y finalmente hacer notar que tanto «echo» como «print» pueden escribirse sin usar los paréntesis, pero es recomendable usarlos pues así nos familiarizamos a su uso como cualquier otra función que podamos usar de PHP.
- Es equivalente: print(«hola») = print «hola» = echo(«hola») = echo «hola»
Y finalmente tenemos include(«fichero»); que nos permite incluir un fichero dentro de nuestra página PHP. Es una sentencia muy útil cuando tenemos una página PHP demasiado grande y queremos dividirla en varios trozos, o para cuando determinado código PHP aparece en varias páginas y así nos evitamos tenerlo escrito varias veces.
Ejemplo:
Si tenemos el siguiente fichero PHP:
<HTML>
<BODY>
<?PHP
include(«texto.txt»);
?>
</BODY>
</HTML>
y el fichero «texto.txt» tiene el contenido:
echo(«este fichero será incluido dentro del PHP»);
es lo mismo que si tuviéramos la siguiente página PHP:
<HTML>
<BODY>
<?PHP
echo(«este fichero será incluido dentro del PHP«);
?>
</BODY>
</HTML>
Fíjese que la identación del fichero que se incluye se mantiene (se incluye tal cual).
Y otra sentencia que nos permite incluir ficheros es require(«fichero»);, que a diferencia de «include» si se produce un error al incluir el fichero se para la carga de la página. Con «include» se muestra un aviso (warning) pero se continúa.
PHP tiene los siguientes tipos de datos:
– integer – Usado para los números enteros.
– double – Usado para números reales o decimales. El separador decimal es un punto y no una coma.
– boolean – Tiene valores lógicos: true y false (verdadero y falso). El cero es el valor falso, y cualquier otro valor será verdadero. (Internamente los booleanos se almacenan como un entero).
– string – Contienen cadenas de caracteres. Podremos usar comillas simples o comillas dobles para delimitar la cadena, es decir, para decir dónde comienza y dónde termina la cadena. Tienen algunas características interesantes como son:
- Si la cadena está delimitada por comillas dobles, cualquier variable incluida dentro de ella será sustituida por su valor.
- Si la cadena está delimitada por comillas simples, cualquier variable incluida dentro de ella NO será sustituida por su valor.
- Si queremos poner el carácter de la comilla simple dentro de una cadena que está delimitada por la comilla simple deberemos usar el carácter escape, para ello pondremos \’
- Si queremos poner el carácter escape dentro de una cadena deberemos ponerlo dos veces, indicando la primera vez que aparece que el siguiente carácter (el de escape) se ha de poner tal cual: \\
- Las cadenas con comillas dobles admiten otros caracteres de escape:
– \n Nueva línea.
– \r Retorno de carro.
– \t Tabulación horizontal.
– \\ Barra invertida
– \$ Signo del dólar.
– \» Comillas dobles.
– array – no contiene un único valor, sino un conjunto de valores referenciados con un índice. Podemos crear arrays de dos formas:
– Estáticamente: creamos el array y le damos valor a cada elemento. Su sintaxis es:
– $miArray=array([índice1]=>[valor1], [índice2]=>[valor2], …);
– Dinámicamente: simplemente asignamos valores en las posiciones que queramos y éstas se definen a la vez. Por ejemplo:
– $otroArray[6]=»valor de tipo string en la posición 7ª»;
Como puede observarse en el ejemplo anterior, aunque el índice tiene el valor «6» esa posición es la 7ª por que los arrays comienzan en la posición cero.
También existen los llamados arrays asociativos, en los que el índice no es un número sino una cadena de texto:
– $semana[«primero»]=»lunes»;
Y por último están los arrays multidimensionales o de varias dimensiones. Supongamos un array en dos dimensiones en el que la primera dimensión nos indicará el código del producto y el la segunda dimensión tendremos sus detalles, como pueden ser la descripción, el precio, etc.
– $producto[1][«precio»]=23.5;
Ejercicio 2.2: Realizar una página con código PHP que muestre en pantalla y en siete líneas un texto como el que aparece a continuación con los días de la semana. Usar para ello.
El primer día de la semana es: lunes
El segundo día de la semana es: martes
El tercer día de la semana es: miércoles
: : :
: : :
Aunque en el apartado anterior ya hemos visto algunas variables vamos a describirlas ahora con más detalle.
– Todas las variables van precedidas del símbolo del dólar.
– Debemos recordar que PHP es sensible a las mayúsculas-minúsculas, por lo que las siguientes variables son distintas: $hola ≠ $Hola ≠ $HOLA
– El nombre de una variable deberá comenzar (después del símbolo dólar) por una letra o por el carácter subrayado, y seguirán por letras, números o el carácter subrayado. NO se permiten letras con acentos.
– El ámbito de una variable, es decir, desde donde se podrá ver su valor, es global a todo el fichero, excepto si nos encontramos en una función que su ámbito será sólo dentro de la función (no se verá fuera de la función).
Veamos un ejemplo:
<?PHP
$numero=23;
$cadena=»esto es una cadena»;
echo(«Esto es un número: $numero «);
echo(«y esto una cadena: $cadena»);
?>
que nos generará la siguiente salida:
Esto es un número: 23 y esto una cadena: esto es una cadena
Como podemos ver esto deberemos incluirlo junto a código HTML para que el explorador nos muestre los resultados formateados, pues aunque usemos dos veces la función «echo» el texto aparecerá seguido (observe que hemos dejado un espacio después de la variable $numero para que lo separe del siguiente texto). Veamos otro ejemplo:
<?PHP
$numero=23;
$cadena=»esto es una cadena»;
echo(«Esto es un número: $numero<BR>»);
echo(«y esto una cadena: $cadena»);
?>
y nos generará la siguiente salida:
Esto es un número: 23<BR>y esto una cadena: esto es una cadena que en el explorador nos aparecería:
Esto es un número: 23
y esto una cadena: esto es una cadena
En este ejemplo podemos ver que hemos usado la etiqueta <BR> de HTML. Deberemos de tener muy claro el funcionamiento del lenguaje de etiquetas HTML pues vamos a necesitar incluirlas dentro del código PHP.
Para terminar con las variables diremos que podemos crear «variables variables», es decir, variables cuyo nombre es variable: la variable tomará su nombre de otra variable que haya sido declarada previamente.
Veámoslo con un ejemplo:
<?PHP
$a=»buenos»;
$$a=»dias»;
echo(«$a $buenos<BR>»);
echo(«$a ${$a}»);
?>
cuya salida será la siguiente:
buenos dias<BR>buenos dias
y el explorador nos mostrará:
buenos dias
buenos dias
La forma de definir una constante es con la función define(), y no llevan el carácter dólar delante:
<?PHP
define(«CONSTANTE»,»Valor»);
echo(«CONSTANTE»);
?>
Por convención las constantes suelen definirse con su nombre en mayúsculas. Y sólo podremos definir constantes que tomen valores booleanos, enteros, decimales y cadenas.
Además existen una serie de constantes predefinidas. Entre éstas tenemos:
– TRUE Verdadero.
– FALSE Falso.
– _FILE_ Fichero que se está procesando.
– _LINE_ Línea del fichero que se está procesando
– _PHP_VERSION Versión de PHP.
– PHP_OS Sistema operativo del cliente.
En PHP una expresión es cualquier cosa que pueda contener un valor. Las expresiones más simples son las variables y las constantes y otras más complicadas serán las funciones, puesto que cada función devuelve un valor al ser invocada, es decir, contiene un valor, por lo tanto, es una expresión.
Para realizar un cálculo usaremos los siguientes operadores:
– Artíméticos:
- + suma.
- – resta.
- * multiplicación.
- / división.
- % resto al realizar una división. (10 % 3 tendrá el valor 1).
- ++ incremento en una unidad de la variable.
- — decremento en una unidad de la variable.
– De asignación:
- = Asigna un valor a una variable: $variable = 23;
- += Le suma a una variable el contenido de otra: $var1 += $var2; (sería lo mismo que: $var1 = $var1 + $var2).
- -= Le resta a una variable el contenido de otra: $var1 -= $var2; (sería lo mismo que: $var1 = $var1 – $var2).
– Lógicos:
- == devuelve TRUE si las expresiones de los dos lados del operador tienen el mismo valor, en caso contrario devuelve FALSE.
- === devuelve TRUE si las expresiones de los dos lados del operador tienen el mismo valor y a la vez son del mismo tipo, en caso contrario devuelve FALSE.
- != devuelve TRUE si las expresiones de los dos lados del operador tienen un valor distinto, en caso contrario devuelve FALSE.
- < menor que… (no necesita más explicación)
- > mayor que… (no necesita más explicación)
- <= menor o igual que… (no necesita más explicación)
- >= mayor o igual que… (no necesita más explicación)
- and devuelve TRUE en caso de que las dos expresiones lógicas de ambos lados del operador sean TRUE, y FALSE en caso contrario.
- && idéntico a «and», pero tiene mayor precedencia (ver tabla de precedencias más adelante).
- or devuelve TRUE en caso de que alguna de las dos expresiones lógicas de ambos lados del operador sean TRUE, y FALSE en caso contrario.
- \\ idéntico a «or», pero tiene mayor precedencia (ver tabla de precedencias más adelante).
- xor devuelve TRUE en caso de una de las expresiones sea TRUE y la otra FALSE, y FALSE en caso contrario. Es decir, TRUE si las dos expresiones tienen distinto valor lógico y FALSE si las dos expresiones tienen el mismo valor lógico (TRUE o FALSE).
- ! operador negación. Devuelve TRUE si la expresión de su derecha es FALSE, y FALSE si el operador de su derecha es TRUE.
– Control de errores:
- @ Situado a la izquierda de una expresión evita que nos aparezca cualquier mensaje de error que sea generado por la expresión. En caso de error el mensaje será almacenado en una variable de tipo «string» llamada «$php_errormsg». En caso de que se produzcan dos errores (no tienen por que ser en instrucciones seguidas) el mensaje del primer error se perderá por que al producirse el segundo error se machaca el contenido de la variable para almacenar el segundo mensaje de error.
A continuación se muestra una tabla (ver Tabla 1 Precedencia de operadores PHP) en la que se puede ver el orden de precedencia entre los distintos operadores. Es decir, en caso de que en una expresión haya dos operadores distintos uno a continuación del otro nos permitirá saber que operación deberemos de realizar primero.
Por ejemplo, con la expresión «6 + 5 * 8» podríamos tener dos resultados «88» si primero realizamos la suma (6 + 5 = 11) y después la multiplicación (11 * 8), o «46» si primero realizamos la multiplicación (8 * 5 = 40) y después la suma (6 + 40). Para resolver este problema miramos en la tabla de precedencias que aparece a continuación y vemos que el operador * tiene mayor precedencia (aparece más arriba), por lo que primero realizaremos la multiplicación y luego la suma (que tiene menos precedencia).
Asociatividad | Operadores | Información Adicional |
no-asociativo | new | new |
izquierda | [ | array() |
no-asociativos | ++ — | incremento/decremento |
no-asociativos | ! ~ – (int) (float) (string) (array) (object) @ | tipos |
izquierda | * / % | aritmética |
izquierda | + – . | aritmética, y cadena |
izquierda | << >> | manejo de bits |
no-asociativos | < <= > >= | comparación |
no-asociativos | == != === !== | comparación |
izquierda | & | manejo de bits, y referencias |
izquierda | ^ | manejo de bits |
izquierda | | | manejo de bits |
izquierda | && | lógicos |
izquierda | || | lógicos |
izquierda | ? : | ternario |
izquierda | = += -= *= /= .= %= &= |= ^= <<= >>= | asignación |
izquierda | and | lógicos |
izquierda | xor | lógicos |
izquierda | or | lógicos |
izquierda | , | varios usos |
Tabla 1 Precedencia de operadores PHP