2- Programación en PHP I
La sintaxis de PHP es muy similar a la de C o C++. Quizás lo más destacado
ocurre a nivel semántico: el tipado es muy poco estricto, es decir, cuando
creamos una variable en ella podemos almacenar el tipo de datos que queramos.
Esto es muy flexible y cómodo para el desarrollador, aunque los errores que se
cometen pueden ser mucho más graves y difíciles de corregir. Las posibilidades
del interprete para detectar incompatibilidades entre variables se reducen mucho
y pueden ocurrir cosas extrañas en determinadas circunstancias si no tenemos
cuidado.
| Nota: Los códigos de esta unidad se guardarán en c:\apache\htdocs\cursoPHP\unidad2 |
PHP y HTML
PHP nos permite embeber sus fragmentos de código dentro de la página
HTML, es decir, es posible incluir lenguaje PHP en un código HTML. Es por tanto
necesario especificar cuáles son las partes constitutivas del código PHP. Esto se
consigue delimitando
nuestro código por etiquetas.
Como vimos en la unidad anterior, el modo de funcionamiento de una página PHP
es el siguiente: el servidor va a reconocer
la extensión correspondiente a la página PHP ( php, php3, php4, phtml,...) y antes de
enviarla al navegador va a encargarse de interpretar y ejecutar todo aquello que
se encuentre entre las etiquetas correspondientes al lenguaje PHP. El resto, lo
enviara sin más, ya que asumirá que se trata de código HTML absolutamente
comprensible por el navegador.
Hay cuatro conjuntos de etiquetas que delimitan el código PHP:
<?php y ?>
<? y ?>
<%
y %>
<script language="php"> y </script> |
De estos cuatro tipos de etiquetas, sólo dos, <?php. . .?> y
<script language="php">. . .</script>, están siempre
disponibles. El
resto pueden ser configuradas en el fichero php.ini para ser o no aceptadas
por el intérprete.
Los siguientes ejemplos muestran las distintas formas de embeber código PHP
en HTML:
 ejecutar
ver código fuente



No os preocupéis si no comprendéis el texto entre las etiquetas, todo
llegará. Os adelantamos que las variables en PHP se definen anteponiendo un símbolo
de dólar ($) y que la instrucción echo sirve para sacar
en pantalla lo que hay escrito a continuación.
La instrucción echo de PHP
Esta instrucción PHP da salida a lo que haya escrito a
continuación. Realmente echo() no es una función (es
una sentencia o instrucción del lenguaje) de modo que no se requiere el uso de
los paréntesis.
| ¡Atención! El primer método, <?php. . .?>, es el más
conveniente y es el que utilizaremos a lo largo del curso. |
| Nota: No se debe usar el formato corto de etiquetas, <?. .
.?>, cuando se desarrollen
aplicaciones o librerías con intención de redistribuirlas, o cuando se
desarrolle para servidores que no están bajo nuestro control, porque puede ser
que el formato corto de etiquetas no esté soportado en el servidor. Para
generar código portable y redistribuíble, asegúrate de no usar el formato
corto de etiquetas. |
Separación de instrucciones
Las separación de instrucciones en PHP se hace terminando cada declaración con un punto y
coma ";".
Para la ultima instrucción, la que va antes del cierre de etiqueta, este
formalismo no es necesario.
Los siguientes códigos son equivalentes, aunque en el segundo no se incluya
punto y coma después de la última instrucción:

ejecutar ver código
fuente

ejecutar
 |
Embeber
código PHP dentro de HTML. Separación de instrucciones. |
Comentarios
Un comentario es un texto de carácter informativo que incluimos en el código
para comprenderlo fácilmente al volverlo a leer un tiempo después. El servidor
ignora los comentarios ya que no van dirigidos a él sino a nosotros
mismos.
Los comentarios tienen una gran utilidad ya que es muy fácil olvidarse del
funcionamiento de un script programado un tiempo atrás y resulta muy útil si
queremos hacer fácilmente comprensible nuestro código a otra persona.
Hay varias formas de incluir estos comentarios dependiendo de si el texto consta
de una o más líneas:
- Para comentarios de una sola línea se utilizan los símbolos doble barra,
//, ó almohadilla, #.
- Mediante los símbolos /* y */ creamos comentarios
multilínea. También es posible usar estos últimos en una sola línea.
Veamos un primer ejemplo:

ejecutar ver código
fuente
La ejecución del programa anterior muestra en pantalla el siguiente resultado,
compruébalo!:

Observamos que el servidor ha ignorado las líneas de texto incluidas entre
comentarios.
| Nota: Todo el texto insertado en forma de comentario es
completamente ignorado por el servidor. Resulta importante acostumbrarse a
dejar comentarios, es algo que se agradece con el tiempo. |
Los estilos de comentarios de una línea sólo comentan hasta el
final de la línea actual de código PHP.
Esto implica que el código HTML tras las marcas // ?> será impreso. La
etiqueta ?> sale del
modo PHP, volviendo al modo HTML donde el comentario // no tiene
influencia.
Veamos un ejemplo aclaratorio:
ejecutar ver código
fuente
El script anterior muestra el siguiente resultado:

Hay que tener cuidado con no anidar comentarios multilínea porque da problemas:
Observamos cómo el editor Zend detecta un error sintáctico en la línea 9
del código ya que muestra una línea roja ondulada bajo el símbolo */. El
código anterior es sintácticamente incorrecto.
 |
Comentarios
en PHP |
Conceptos Generales
Enteros
Los enteros se pueden especificar usando la siguiente sintaxis:
$num1 = 7577; // El dato (o variable) $num1 es de tipo entero.
$num2 = -33; // El dato (o variable) $num2 es de tipo entero.
Números en punto flotante
Los números en punto flotante (números decimales) se pueden especificar
utilizando la siguiente sintaxis:
$num = 75.77; // El separador decimal es un punto y no una coma.
Cadenas
Las cadenas de caracteres se pueden especificar usando dos tipos de
delimitadores:
- Comillas dobles: Si la cadena está encerrada entre dobles comillas (""), las variables
que estén dentro de la cadena serán expandidas (es decir, en la cadena
aparecerá el valor de la variable y no su nombre). El carácter de barra invertida
("\") se puede usar para especificar caracteres especiales:
| Secuencia |
Significado |
|
\n |
Nueva línea |
|
\r |
Retorno de carro |
| \t |
Tabulación horizontal |
|
\\ |
Barra invertida |
|
\$ |
Signo del dólar |
|
\" |
Comillas dobles |
- Comillas simples: Cuando una cadena va encerrada entre comillas
simples (''), los únicos caracteres de escape que serán comprendidos son
"\\" y "\'". Esto es por convenio, así que se pueden tener
comillas simples y barras invertidas en una cadena entre comillas simples. Las
variables no se expandirán dentro de una cadena entre comillas simples.
Las cadenas se pueden concatenar usando el operador '.' (punto). Nótese que
el operador '+' (suma) no sirve para esto.
Se puede acceder a los caracteres dentro de una cadena tratándola como un
array de caracteres indexado numéricamente (el primer carácter de la
cadena tendrá el índice 0)
Algunos ejemplos de cadenas:

ejecutar ver código
fuente
El script anterior produce la siguiente salida:

 |
Tratamiento
de cadenas de texto. |
Arrays
Un array es un tipo de datos con una importante peculiaridad: no
contiene un único valor, sino un conjunto de valores referenciados con
un índice. Aunque al principio puedan parecer poco amistosos, su uso es
utilísimo e imprescindible en programación.
Hay dos formas de crear arrays, estática o dinámicamente:
- Podemos crear arrays de forma estática usando la función array() con la
siguiente sintaxis:
Array array([índice1]=>[valor1], [índice2]=>[valor2], ...);
teniendo en cuenta que podemos asignar manualmente el índice o dejar que PHP
lo haga por nosotros.
Veamos un ejemplo: Supongamos que queremos almacenar en variables los días de
la semana. Podríamos usar variables simples ($semana1="lunes";$semana2="martes";
y así
sucesivamente), o podemos declarar un array llamado $semana:

obteniendo así un array con una lista indexada de los días de la semana. El
primer valor corresponde al índice cero, el segundo al uno, y así sucesivamente.
| Nota: Por convención, el primer valor de un array corresponde siempre -por defecto-
al valor cero. |
Ahora podemos recuperar cualquier valor específico refiriéndonos
a su índice.
Por ejemplo, para presentar el nombre del tercer día de la semana podríamos escribir simplemente:

- Tambien podemos crear arrays dinámicamente, sencillamente agregando nuevos
valores. Por ejemplo:

Por este mismo sistema también
podemos modificar el valor de un array dado, e incluso añadir valores sin
asignar índice, que será asignado automáticamente por PHP:

Arrays asociativos
Como hemos comentado, un array está formado por conjuntos de pares indice
=> valor.
Hasta ahora hemos manejado un ejemplo con índices numéricos (a este tipo de
arrays se les conoce como arrays escalares), pero también es posible usar
cadenas de caracteres como índices. Este tipo de arrays son los arrays
asociativos:
Arrays Multidimensionales
Un array multidimensional es un array en el que al menos uno de sus valores
es, a su vez, un array:

Y podemos acceder a dichos valores añadiendo un par de corchetes:

Este código muestra por pantalla: 642378510
Veamos cómo utilizar la función array() para "rellenar" arrays multidimensionales:

Objetos
Se trata de conjuntos de variables y funciones asociadas. Presentan una
complejidad mayor que los tipos vistos hasta el momento y por ello serán
tratados con más detenimiento en la siguiente unidad. Su utilidad es muy
interesante.
Conceptos Generales
Variables predefinidas
Dada su naturaleza de lenguaje de lado servidor,
PHP proporciona una gran cantidad de variables predefinidas, que nos informan sobre nuestro servidor y sobre el
cliente. La información de estas variables es atribuida por el servidor y en
ningún caso nos es posible modificar sus valores directamente mediante el
script. Para hacerlo es necesario influir directamente sobre la propiedad que
definen.
Existen multitud de variables de este tipo, algunas sin utilidad aparente y
otras realmente interesantes y con una aplicación directa para nuestro sitio
web. Aquí enumeramos algunas de estas variables y la información que nos
aportan:
| Variable |
Descripción |
| $HTTP_USER_AGENT |
Nos informa principalmente sobre el sistema operativo y tipo y versión
de navegador utilizado por el internauta. Su principal utilidad radica
en que, a partir de esta información, podemos redireccionar nuestros
usuarios hacia páginas optimizadas para su navegador o realizar
cualquier otro tipo de acción en el contexto de un navegador
determinado. |
| $HTTP_ACCEPT_LANGUAGE |
Nos devuelve la o las abreviaturas de la lengua considerada como
principal por el navegador. Esta lengua o lenguas principales pueden ser
elegidas en el menú de opciones del navegador. Esta variable resulta
también extremadamente útil para enviar al internauta a las páginas
escritas en su lengua, si es que existen. |
| $HTTP_REFERER |
Nos indica la URL desde la cual el internauta ha tenido acceso a la página.
Muy interesante para generar botones de "Atrás" dinámicos o
para crear nuestros propios sistemas de estadísticas de visitas. |
| $PHP_SELF |
Nos devuelve una cadena con la URL del script que está siendo
ejecutado. Muy interesante para crear botones para recargar la página. |
| $HTTP_GET_VARS |
Se trata de un array que almacena los nombres y contenidos de las
variables enviadas al script por URL o por formularios GET |
| $HTTP_POST_VARS |
Se trata de un array que almacena los nombres y contenidos de las
variables enviadas al script por medio de un formulario POST |
| $HTTP_COOKIES_VARS |
Se trata de un array que almacena los nombres y contenidos de las
cookies. Veremos qué son más adelante. |
| $PHP_AUTH_USER |
Almacena la variable usuario cuando se efectúa la entrada a páginas
de acceso restringido. Combinado con $PHP_AUTH_PW resulta ideal para
controlar el acceso a las páginas internas del sitio. |
| $PHP_AUTH_PW |
Almacena la variable password cuando se efectúa la entrada a páginas
de acceso restringido. Combinado con $PHP_AUTH_USER resulta ideal para
controlar el acceso a las páginas internas del sitio. |
| $REMOTE_ADDR |
Muestra la dirección IP del visitante. |
| $DOCUMENT_ROOT |
Nos devuelve el path físico en el que se encuentra alojada la página
en el servidor. |
| $PHPSESSID |
Guarda el identificador de sesión del usuario. Veremos más adelante
en qué consisten las sesiones. |
| Nota:
No todas estas variables están disponibles en la totalidad de servidores o en
determinadas versiones de un mismo servidor. Además, algunas de ellas han de
ser previamente activadas o definidas. Así,
por ejemplo, la variable $HTTP_REFERER no estará definida a menos que el
internauta acceda al script a partir de un enlace desde otra página.
Para obtener la lista de variables predefinidas disponibles en nuestra
instalación podemos ejecutar el script phpinfo.php que se ha
instalado en la carpeta htdocs de Apache. Para ello basta con escribir en
la barra de direcciones del navegador http://localhost/phpinfo.php.
Obtendremos así gran cantidad de información sobre el estado actual
de PHP: opciones de compilación y extensiones de PHP, la versión PHP,
información y entorno del servidor, el entorno PHP, información sobre la
versión del SO, rutas, opciones de configuración maestras y locales,
cabeceras HTTP, y la Licencia Pública GNU.
|
Ámbito de las variables
-
El ámbito de una variable es el contexto dentro del cual la variable está
definida.
-
La mayor parte de las variables PHP sólo tienen un ámbito simple.
Este ámbito simple también abarca los ficheros incluidos y los requeridos. Por
ejemplo:
-
Dentro de las funciones definidas por el usuario aparece un ámbito local a la
función, es decir, cualquier variable que se use dentro de una función está, por
defecto, limitada al ámbito local de la función.
Por ejemplo:
| Nota: El comportamiento descrito en el ejemplo difiere lenguaje C, en el
que las variables globales están disponibles automáticamente dentro de la
función a menos que sean expresamente sobreescritas por una definición local. |
| Importante: En PHP, las variables globales deben ser declaradas
globales dentro de la función si van a ser utilizadas dentro de dicha función. No hay límite al número de variables globales
que se pueden manipular dentro de una función. Veamos un ejemplo: |

- Otra característica importante del ámbito de las variables es la variable
static. Una variable estática existe sólo en el ámbito local de la función,
pero no pierde su valor cuando la ejecución del programa abandona este ámbito.
Consideremos el siguiente ejemplo:

- Una constante es un dato cuyo valor no puede variar durante la ejecución del
programa.
- El nombre de las constantes es sensible a mayúsculas.
Por convención, los identificadores (nombres) de las constantes suelen declararse en
mayúsculas.
| Importante: Un nombre de constante válido empieza con una letra o
el carácter de
subrayado, seguido por una serie letras, números, o subrayados. Los nombres de
constantes en PHP no admiten espacios en blanco, signos de puntuación
(acentos, ¡!, ¿?, etc), ni caracteres especiales(%, ñ, etc).
|
- El alcance de una constante es global, es decir, es posible acceder a ellas
sin preocuparse por el ámbito de alcance.
Sintaxis
-
Se puede definir una constante usando la función define(). Una vez definida, no
puede ser modificada ni eliminada.
- Solo se puede definir como constantes valores escalares (boolean, integer,
float y string ). Los tipos escalares son aquellos cuyos valores no pueden 'dividirse' en
partes menores, no como los arrays, por ejemplo.
- Para obtener el valor de una constante solo es necesario especificar su
nombre. A diferencia de las variables, no se tiene que especificar el prefijo $.
También se puede utilizar la función constant() para obtener el valor de una
constante.
- Diferencias entre constantes y variables:
- Las constantes no son precedidas por un símbolo de dólar ($).
- Las constantes solo pueden ser definidas usando la función() define , nunca
por simple asignación.
- Las constantes pueden ser definidas y accedidas sin tener en cuenta las
reglas de alcance del ámbito.
- Las constantes no pueden ser redefinidas o eliminadas después de
establecerse.
- Las constantes solo puede albergar valores escalares (boolean, integer,
float y string ).
Ejemplo: Definición de constantes
Constantes predefinidas
PHP ofrece un largo número de constantes predefinidas. Muchas de estas constantes, sin embargo, son creadas por diferentes
extensiones, y solo estarán presentes si dichas extensiones están disponibles.
A lo largo del curso comentaremos las constantes predefinidas más utilizadas en
PHP.
Operadores Aritméticos
| Sintaxis |
Nombre |
Descripción |
|
$a + $b |
Adición |
Suma de $a y $b. |
|
$a - $b |
Substracción |
Diferencia entre $a y $b |
|
$a * $b |
Multiplicación |
Producto de $a y $b |
|
$a / $b |
División |
Cociente de $a entre $b |
|
$a % $b |
Módulo |
Resto de la división de $a entre $b |
Operadores de Asignación
El operador básico de asignación es "=".
No tiene el significado del operador de comparación "igual que", lo
que realmente significa es que el operando de la izquierda toma el valor de la
expresión a la derecha, es decir, se podría traducir por "toma el valor de".
El valor de una expresión de asignación es el propio valor asignado. Esto
es, el valor de "$a = 3" es 3.
Esto permite hacer cosas curiosas como:

Además del operador básico de asignación, existen los "operadores
combinados" para todas las operaciones aritméticas y de cadenas que sean
binarias. Estos operadores combinados permiten, de una sola vez, usar una variable
en una expresión y luego establecer el valor de esa variable al resultado de la
expresión. Por ejemplo:
Operadores de Comparación
Los operadores de comparación, como su nombre indica, permiten comparar dos
valores.
| Sintaxis |
Nombre |
Descripción |
|
$a == $b |
Igualdad |
Cierto si $a es igual a $b. |
|
$a === $b |
Identidad |
Cierto si $a es igual a $b y si son del mismo tipo (sólo
PHP4) |
|
$a != $b |
Desigualdad |
Cierto si $a no es igual a $b. |
|
$a < $b |
Menor que |
Cierto si $a es estrictamente menor que
$b. |
|
$a > $b |
Mayor que |
Cierto si $a es estrictamente mayor que
$b. |
|
$a <= $b |
Menor o igual que |
Cierto si $a es menor o igual que $b. |
|
$a >= $b |
Mayor o igual que |
Cierto si $a es mayor o igual que $b. |
Operadores de Incremento/Decremento
PHP soporta los operadores de predecremento y post incremento al estilo de C.
| Sintaxis |
Nombre |
Descripción |
|
++$a |
Preincremento |
Incrementa $a en uno y después devuelve
$a. |
|
$a++ |
Postincremento |
Devuelve $a y después incrementa $a en uno. |
|
--$a |
Predecremento |
Decrementa $a en uno y después devuelve
$a. |
|
$a-- |
Postdecremento |
Devuelve $a y después decrementa $a en uno. |
Veamos un ejemplo:
ejecutar ver código
fuente
El programa anterior muestra el siguiente resultado:
 |
Operadores
preincremento, postincremento, predecremento y postdecremento. |
Operadores Lógicos
| Sintaxis |
Nombre |
Descripción |
|
$a and $b ó
$a && $b |
Y |
Cierto si tanto $a como $b son ciertos. |
|
$a or $b ó
$a || $b |
O |
Cierto si $a o $b son ciertos. |
|
$a xor $b |
O exclusiva |
Cierto si $a es cierto o $b es cierto, pero no ambos a la
vez. |
|
! $a |
Negación |
Cierto si $a no es cierto. |
Operadores de Cadenas
Hay dos operadores de cadenas:
- El operador de concatenación '.', que devuelve el resultado de concatenar sus operandos izquierdo y
derecho.
- El operador de concatenación-asignación '.=', que asigna al
operando izquierdo el resultado de su concatenación con el operando
derecho.
Ejemplo:

Expresiones
- PHP es un lenguaje orientado a expresiones, en el sentido de
que casi todo es una expresión. En PHP, casi cualquier cosa que escribimos es una expresión. La forma más simple de definir una
expresión es "cualquier cosa que tiene un valor".
- Las formas más básicas de expresiones son las constantes y las variables:
Cuando escribimos '$a = 5', estamos asignando '5' a $a. Obviamente, '5' tiene el valor 5 o, en otras palabras '5' es una expresión con el valor 5 (en
este caso, '5' es una constante entera). Y también $a es una expresión con el
valor 5 (en este caso, $a es una variable entera).
- Las funciones son un ejemplo algo más complejo de expresiones. Son expresiones que valen el valor que
retornan (una función retorna un valor mediante el comando return, como
estudiaremos más adelante). Por ejemplo, consideremos la siguiente función:

Como la función prueba() devuelve el valor 5, el valor de la expresión 'prueba()' es 5.
Por lo tanto, teclear $a=prueba() es esencialmente lo mismo que escribir $a=5. Normalmente las funciones no
devuelven un valor fijo, sino que suele ser calculado.
- Volvamos al ejemplo inicial '$a = 5'. Es
sencillo ver que hay dos valores involucrados, el valor de la constante entera
'5' y el valor de $a que está siendo actualizado también a 5. Pero la verdad
es que hay un valor adicional implicado, y es el valor de la propia asignación.
Una asignación es una expresión que se evalúa al valor asignado, en este caso 5.
En la práctica, esto quiere decir que '$a = 5', independientemente de lo que hace,
es una expresión con el valor 5. De esta manera, escribir algo como '$b = ($a =
5)' es como escribir '$a = 5; $b = 5;' (un punto y coma marca el final de una
instrucción). Como las asignaciones se evalúan de derecha a izquierda, también
podemos escribir '$b = $a = 5'.
- Un tipo muy corriente de expresiones son las expresiones de comparación.
Estas expresiones se evalúan a 0 ó 1, significando FALSO (FALSE) o CIERTO (TRUE),
respectivamente. PHP soporta > (mayor que), >= (mayor o igual que), ==
(igual que), != (distinto), < (menor que) y <= (menor o igual que). Estas
expresiones se usan frecuentemente dentro de una ejecución condicional como la
instrucción if.
- El último tipo de expresiones que trataremos, es la combinación
operador-asignación. Si escribimos '$a = $a + 3', '$a + 3' se evalúa al valor de $a más 3, y se asigna de nuevo a
$a, lo que da como resultado el incremento de $a en 3 unidades.
En PHP, como en otros lenguajes como
C, es posible escribir esto de una forma más concisa: añadir 3 al valor actual de $a se puede
escribir como '$a += 3'. Esto quiere decir exactamente "toma el valor de
$a,
súmale 3, y asígnalo otra vez a $a". Además de ser más corto y claro,
también la ejecución es más rápida. El valor de '$a += 3', como el
valor de una asignación normal y corriente, es el valor asignado. Hay que tener
en cuenta
que dicho valor NO es 3, sino el valor de $a más 3.
Cualquier operación binaria puede ser usada en forma de
operador-asignación, por ejemplo:
'$a -= 5' (restar 5 del valor de $a)
'$b *=
7' (multiplicar el valor de $b por 7), etc.
Veamos un último ejemplo:
 |
Funciones
y operadores |
Nota: El valor booleano de las expresiones.
En muchas ocasiones, principalmente en condicionales y bucles, no es
relevante el valor exacto de una expresión, sino únicamente si es
CIERTA (TRUE) o FALSA (FALSE). Dado que PHP no tiene un tipo booleano
específico, el
valor de verdad de las expresiones en PHP se calcula de la siguiente forma:
- Cualquier valor numérico distinto de cero es CIERTO (TRUE) y cero es FALSO
(FALSE).
Fíjate en que los valores negativos son considerados CIERTO (TRUE).
- La cadena vacía y la cadena "0" son FALSO (FALSE); todas las
demás cadenas son TRUE.
- Con los tipos no escalares (arrays y objetos), si el valor no contiene elementos se considera FALSO
(FALSE), en caso contrario se
considera CIERTO (TRUE).
|
Instrucciones
Una instrucción es una expresión seguida de un punto y coma, es
decir, una instrucción tiene la forma 'expresión;'.
En el ejemplo '$b=$a=5;', $a=5 es una expresión válida, pero
no es una instrucción en sí misma. Por otro lado '$b=$a=5;' sí es una
instrucción válida.
|