Capítulo 3, Introduccion A PHP
Capítulo 3, Introduccion A PHP
Introducción a PHP
En el capítulo 1, expliqué que PHP es el lenguaje que se utiliza para hacer que el servidor genere
una salida dinámica que es potencialmente diferente cada vez que un navegador solicita una página.
En este capítulo, comenzará a aprender este lenguaje sencillo pero potente, este será el tema de los
capítulos siguientes hasta el Capítulo 6.
Yo animo a desarrollar el código PHP en una de las IDEs que figuran en el capítulo 2. Esto le
ayudará a coger errores y acelerar el aprendizaje enormemente en comparación con los editores
menos funcionales.
Muchos de estos entornos de desarrollo permiten ejecutar el código PHP y ver la salida discutida en
este capítulo. También voy a mostrar cómo incrustar el PHP en un archivo HTML para que pueda
ver como luce en una página web (la forma en que los usuarios acabarán viéndola). Pero ese paso,
tan emocionante como puede ser en un primer momento, no es realmente importante en esta etapa.
En la producción, sus páginas web serán una combinación de PHP, HTML y JavaScript, y algunas
declaraciones de MySQL. Además, cada página puede llevar a otras páginas para proporcionar a los
usuarios maneras de hacer clic a través de enlaces y rellenar formularios. Podemos evitar toda esa
complejidad mientras se aprende cada idioma, sin embargo. El enfoque de ahora en adelante es sólo
escribir código PHP y asegurarse de que obtenga el resultado esperado, o al menos que usted
entienda la salida que está consiguiendo!
La primera cosa que usted puede notar es que la etiqueta no se ha cerrado. Esto se debe a sectores
enteros de PHP se pueden colocar dentro de esta etiqueta y terminan sólo cuando se encuentra la
pieza de cierre, que se ve así:
?>
Una pequeña "Hola Mundo" PHP puede ser como el Ejemplo 3-1.
Ejemplo 3-1. La invocación de PHP
<?php
echo "Hello world";
?>
La forma de usar esta etiqueta es bastante flexible. Algunos programadores abren la etiqueta al
principio de un documento y cerrar bien al final, la salida de todo el código HTML directamente de
comandos PHP.
Otros, sin embargo, optan por insertar sólo los más pequeños posibles fragmentos de PHP dentro de
estas etiquetas donde se requiere scripting dinámico, dejando el resto del documento en el estándar
HTML.
Este último tipo de programador sostiene generalmente que su estilo de codificación de los
resultados de código más rápido, mientras que el primero dice que el aumento de velocidad es tan
mínimo que no justifica la complejidad adicional de abandonar y salir de PHP muchas veces en un
solo documento.
A medida que aprenda más, seguramente descubrir tu estilo preferido de desarrollo de PHP, pero en
aras de hacer que los ejemplos de este libro más fácil de seguir, me ha adoptado el enfoque de
mantener el número de transferencias entre PHP y HTML al mínimo-generalmente sólo una o dos
veces en un documento.
Por cierto, existe una ligera variación de la sintaxis de PHP. Si usted navega por Internet para ver
ejemplos de PHP, también se puede encontrar código en la sintaxis de apertura y de cierre utilizado
es el siguiente:
<?
echo "Hello world";
?>
Aunque no es tan obvio que el intérprete PHP está siendo llamado, esto es una sintaxis alternativa
válida que también suele funcionar (aunque no con el paquete WAMP EasyPHP), pero debe ser
desalentada, ya que es incompatible con XML y su uso está obsoleto (lo que significa que ya no se
recomienda y podría ser eliminado en futuras versiones).
NOTA: Si sólo tiene código PHP en un archivo, puede omitir el cierre >. Esto es realmente una
buena práctica, ya que se asegurará de que no tienes exceso de espacio en blanco goteando de tus
archivos PHP (especialmente importante a la hora de escribir código orientado a objetos).
Figura 3-1. Visualización de ejemplos de este libro en http://lpmj.net
Además de tener todos los ejemplos guardados por capítulo y el numero ejemplo (por ejemplo
example3-1.php), el archivo EXAMPLES.ZIP proporcionado también contiene una carpeta
adicional denominada named_examples, en la que encontrará todos los ejemplos, que te sugiero
guardar utilizando un nombre de archivo específico, como Ejemplo 3-4 (se verá más adelante, este
archivo se debe guardar como test1.php).
Si usted lee este libro en frente de una computadora (y esperamos que pueda, de modo que usted
puede probar lo que se aprende), al utilizar el sitio también será capaz de ver algunos ejemplos que
aparecen en pantalla, con un máximo de dos clicks, lo que facilitara su referencia a medida que lee.
La estructura de PHP
Vamos a cubrir mucho terreno en este apartado. No es demasiado difícil, pero yo recomiendo que
usted trabaje su manera a través de él con cuidado, ya que establece las bases para todo lo demás en
este libro. Como siempre, hay algunas preguntas útiles al final del capítulo que se puede utilizar
para probar cuánto ha aprendido.
Usar Comentarios
Hay dos maneras en que usted puede agregar comentarios a su código PHP. El primero resulta de
una sola línea en un comentario precediéndolo con un par de barras diagonales, así:
/ / Esto es un comentario
Esta versión de la característica de comentarios es una buena manera de eliminar temporalmente
una línea de código de un programa que te da errores. Por ejemplo, podría usar un comentario como
para ocultar una línea de depuración de código hasta que lo necesite, así:
// echo "X equals $x";
También puede utilizar este tipo de comentario directamente después de una línea de código para
describir su acción, así:
$ x + = 10 // Incremento de $ x por 10
Cuando necesite los comentarios de varias líneas, hay un segundo tipo de comentario, que parece el
Ejemplo 3-2.
<?php
/* This is a section
of multiline comments
which will not be
interpreted */
?>
Puede utilizar el / * y * / pares de caracteres para abrir y cerrar los comentarios de casi cualquier
lugar que desee dentro de su código. La mayoría, si no todos, los programadores utilizan esta
construcción para comentar temporalmente fuera secciones enteras de código que no funcionan o
que, por una u otra razón, no quiere ser interpretado.
NOTA: Un error común es usar / * y * / al comentar una gran sección de código que ya contiene
una sección de comentarios de espera que utiliza esos caracteres. No se puede anidar
comentarios de esta manera, el intérprete de PHP no sabrá dónde termina un comentario y
mostrará un mensaje de error. Sin embargo, si utiliza un editor de programas o IDE con
resaltado de sintaxis, este tipo de error es más fácil de detectar.
Sintaxis básica
PHP es un lenguaje muy sencillo, con raíces en C y Perl, pero se parece más a Java. También es
muy flexible, pero hay algunas reglas que usted necesita aprender acerca de su sintaxis y estructura.
Punto y coma
Usted puede haber notado en los ejemplos anteriores que los comandos PHP culminaron con un
punto y coma, por ejemplo:
$x += 10;
Probablemente la causa más común de los errores que se encontrará con PHP es olvidar este punto
y coma, lo que causa que PHP trate múltiples declaraciones como una afirmación, encontrándose en
la imposibilidad de entender y produciendo un mensaje de "Error de análisis".
El símbolo $
El símbolo $ ha llegado a ser utilizado de muchas maneras diferentes por los distintos lenguajes de
programación. Por ejemplo, si usted ha escrito en el lenguaje BASIC, usted ha utilizado el $ para
terminar nombres de las variables para denotar como cadenas.
En PHP, sin embargo, se debe colocar un $ en frente de todas las variables. Esto es necesario para
hacer que PHP analice más rápido, ya que sabe al instante cada vez que se encuentra con alguna
variable. Si las variables son números, cadenas o matrices, están deberán parecerse a las del ejemplo
3-3.
<?php
$mycounter = 1;
$mystring = "Hello";
$myarray = array("One", "Two", "Three");
?>
Y en realidad eso es prácticamente toda la sintaxis que tienes que recordar. A diferencia de
lenguajes como Python, que son muy estrictos acerca de cómo aplica sangría y código de diseño,
PHP te deja completamente libre para usar (o no usar) toda la sangría y el espaciado que desee. De
hecho, por lo general se recomienda el uso racional de lo que se llama un espacio en blanco (junto
con un comentario de comprensión) para ayudarle a entender el código cuando vuelvas a esa parte.
También ayuda a otros programadores que tienen que entender su código.
Figura 3-2. Usted puede pensar en las variables como cajas de fósforos que contienen artículos
Las comillas indican que "Fred Smith" es una cadena de caracteres. Usted debe encerrar cada
cadena, ya sea entre comillas o apóstrofes (comillas simples), aunque hay una sutil diferencia entre
los dos tipos de cita, que se explica más adelante. Si quieres ver lo que hay en la caja, la abres,
tomas el pedazo de papel, y lo lees. En PHP, hacerlo se parece a esto:
echo $username;
O puedes asignarlo a otra variable (fotocopia del papel y ubicar la copia en otra caja de cerillas),
así:
$current_user = $username;
Si usted está interesado en comenzar a probar PHP por sí mismo, usted podría intentar entrar en los
ejemplos de este capítulo en un IDE (como se recomienda en el final del capítulo 2), para ver
resultados inmediatos, o se puede introducir el código del Ejemplo 3 - 4 en un editor de programa y
guárdelo en el directorio de desarrollo web (también discutido en el capítulo 2) como test1.php.
<?php // test1.php
$username = "Fred Smith";
echo $username;
echo "<br />";
$current_user = $username;
echo $current_user;
?>
Ahora puedes llamarlo introduciendo la URL de su directorio de desarrollo web y el nombre del
archivo test1.php en la barra de direcciones de su navegador. Por ejemplo, si está utilizando un PC y
el alias del directorio de desarrollo se llama Web, introduzca lo siguiente en su navegador:
http://localhost/web/test1.php
El resultado de ejecutar este código deben ser dos apariciones del nombre “Fred Smith”, el primero
de ellos es el resultado del comando echo $username y el segundo es del comando echo
$current_user.
También puede utilizar un numero de punto flotante (que contiene un punto decimal), la sintaxis es
la misma:
$count = 17.5;
Para leer el contenido de la caja de cerillas, solo tendrá que abrirla y contar los granos. En PHP,
asigne el valor de $count a otra variable o tal vez solo echo al navegador web.
Matrices
¿Que son las matrices? Bueno, puede pensar en ellos como varias cajas de cerillas pegadas juntas.
Por ejemplo, digamos que queremos almacenar los nombres de cinco jugadores de un equipo de
futbol en una matriz llamada $team. Para ello, pondríamos pegar las cinco cajas de cerillas lado a
lado y anotar los nombres de los jugadores en hojas separadas, colocando una en cada caja de
cerillas.
A través de toda la parte superior del conjunto de cajas de cerillas deberemos escribir la palabra
team (ver Figura 3-3). El equivalente de esto en PHP seria:
Esta sintaxis es más complicada que las que he explicado hasta ahora. El código de construcción de
la matriz consiste en el siguente método:
array();
con cinco cadenas en su interior. Cada cadena está encerrada entre apóstrofes.
La razón por la afirmación anterior tiene el número 3 y no un 4 es porque el primer elemento de una
matriz PHP es en realidad el elemento cero, por lo tanto, los números de los jugadores serán del 0 a
4.
Matrices bidimensionales
Hay mucho más que puedes hacer con matrices. Por ejemplo, en lugar de ser líneas
unidimensionales de cajas de cerillas, etas pueden ser matrices bidimensionales o incluso pueden
tener tres o más dimensiones.
Como un ejemplo de una matriz de dos dimensiones, digamos que queremos hacer un seguimiento
de un juego de tic-tac-toe, lo que requiere una estructura de datos de nueve celdas dispuestas en un
cuadrado de 3 × 3. Para representar esto con cajas de cerillas, imagina nueve de ellas pegadas una a
la otra en una matriz de tres filas por tres columnas (véase la figura 3-4).
Ahora puede colocar un trozo de papel, ya sea con una "x" o una "o" en la caja de cerillas correcta
para cada jugada realizada. Para hacer esto en código PHP, tendrá que crear una matriz que contiene
tres matrices más, como en el ejemplo 3-5, en el que la matriz está configurada con un juego en
progreso.
<?php
$oxo = array(array('x', '', 'o'),
array('o', 'o', 'x'),
array('x', 'o', '' ));
?>
Una vez más, nos hemos movido un paso en complejidad, pero es fácil de entender si se comprende
la sintaxis básica de una matriz. Hay tres constructores de matrices () anidados dentro del
constructor de la matriz () externa.
Para obtener el tercer elemento de la segunda fila de esta matriz, se utiliza el comando PHP
siguiente, que mostrará una "x":
echo $oxo[1][2];
NOTA: Recuerde que los índices de matriz (punteros a elementos dentro de una matriz) empiezan
desde cero, no uno, por lo que el [1] en el comando anterior se refiere a la segunda de las tres
matrices, y el [2] hace referencia a la tercera posición dentro de esa matriz. Se devolverá el
contenido de la caja de cerillas tres a lo largo y dos abajo.
Como se ha mencionado, las matrices con aun más dimensiones son apoyadas por la simple
creación de más matrices en matrices. Sin embargo, no vamos a estar cubriendo las matrices de más
de dos dimensiones en este libro.
Y no se preocupe si todavía está teniendo dificultades para llegar a enfrentarse con el uso de
matrices, ya que el tema se explica en detalle en el capítulo 6.
-Los nombres de variables deben comenzar con una letra del alfabeto o el _ (guión bajo).
-Los nombres de variables pueden contener sólo los caracteres: a-z, A-Z, 0-9 y _ (guión bajo).
-Los nombres de variables no pueden contener espacios. Si una variable debe incluir más de una
palabra debe estar separado con el _ (guión bajo). (por ejemplo, $ nombre_usuario).
Operadores
Los operadores son la matemática, cadena, la comparación y comandos lógicos como más, menos,
los tiempos y dividir. PHP se parece mucho a la aritmética simple, por ejemplo, la siguiente
declaración manda un 8:
echo 6 + 2;
Antes de pasar a aprender lo que PHP puede hacer por usted, tome un momento para aprender
acerca de los diferentes operadores que proporciona.
$count += 1;
$count = $count + 1;
Las cadenas tienen su propio operador, el punto (.), detallado en la sección “La concatenación de
cadenas” en la página 46.
Aquí hemos movido el conjunto de instrucciones para tener que ir a almorzar a una función que
vamos a tener que crear más adelante llamada dolunch. La continuación de la declaración se deja
fuera, porque se da a entender y por lo tanto es innecesario.
Como muestra el ejemplo anterior, se debe utilizar un operador lógico para combinar los resultados
de dos de los operadores de comparación mostrados en la sección anterior. Un operador lógico
también puede ser la entrada de otro operador lógico (“Si la hora pasa de las 12pm y no pasa de las
2pm, entonces tome el almuerzo, o si el olor del asado está penetrando el pasillo y hay platos en la
mesa”). Como regla general, si algo tiene un valor verdadero o falso, puede ser la entrada de un
operador lógico. Un operador lógico toma dos entradas verdaderas o falsas y produce un resultado
verdadero o falso.
Tenga en cuenta que ‘&&’ pueden ser intercambiables con ‘and’ y lo mismo es cierto para ‘||’ y
‘or’. Pero ‘and’ y ‘or’ tienen una prioridad más baja, por lo que en algunos casos, puede ser
necesarios paréntesis adicionales para forzar la procedencia deseada. Por otro lado, hay veces en
que solamente ‘and’ o ‘or’ son aceptables, como en la siguiente declaración, que utiliza un operador
(que se explica en el Capítulo 10):
El más inusual de estos operadores es xor, que significa exclusiva o y devuelve un verdadero si
alguno de los valores es cierto, pero un valor falso si ambas entradas son verdaderas o ambas
entradas son falsas. Para entender esto, imagine que usted quiere inventar su propio limpiador de
artículos para el hogar. El amoníaco es un buen limpiador, y lo mismo ocurre con blanqueador, por
lo que usted quiere que su limpiador tenga uno de estos. Pero la limpieza no debe tener ambos, ya
que la combinación es peligrosa. En PHP, puede representar esto como:
Asignación de variables
La sintaxis para asignar un valor a una variable es siempre variable = valor. O, para reasignar el
valor de otra variable, es otra variable = variable.
También hay un par de otros operadores de asignación que le serán útiles. Por ejemplo, ya hemos
visto:
$x += 10;
que le dice al intérprete PHP añadir el valor a la derecha (en este ejemplo, el valor 10) a la variable
$x. Del mismo modo, podríamos restar de la siguiente manera:
$y -= 10;
Variable incremento y decremento
Al añadir o restar 1 es una operación tan común que PHP proporciona operadores especiales para
ello. Puede utilizar uno de los siguientes operadores en el lugar de los + = y - =:
++$x;
--$y;
En conjunción con una prueba (una sentencia if), puede utilizar el siguiente código:
Esto le indica a PHP que primero incremente el valor de $x y luego compruebe si tiene el valor de
10, y si lo tiene, que muestre el valor. Pero también se puede requerir PHP para incrementar (o, en
el siguiente ejemplo, el decremento) una variable después de que ha puesto a prueba el valor, así:
lo que da un resultado ligeramente diferente. Supongamos que $y empieza como 0 antes de que se
ejecute la sentencia. La comparación devuelve un resultado verdadero, pero $y se establece en -1
después de que se hizo la comparación. Entonces, ¿cuál será la sentencia echo mostrada: 0 o -1?
Trata de adivinar y, a continuación, probar la afirmación en un procesador de PHP para confirmar.
Debido a esta combinación de estados es confuso, que debe ser tomado como sólo un ejemplo
educativo y no como una guía para un buen estilo de programación.
Por cierto, la respuesta correcta a la pregunta anterior es que la sentencia echo mostrará el resultado
de -1, ya que $y se disminuye justo después de que se ha accedido en la sentencia if, y antes de la
declaración de echo.
La concatenación de cadenas
La concatenación de cadenas utiliza el punto (.) Para añadir una cadena de caracteres a otra. La
forma más sencilla de hacerlo es la siguiente:
Si se asume que la variable $msgs se establece en el valor 5, la salida de esta línea de código será:
Así como puede agregar un valor a una variable numérica con el operador + =, puede añadir una
cadena a otra usando .= como esto:
$bulletin .= $newsflash;
En este caso, si $boletín contiene un boletín de noticias y $newsflash tiene una noticia de última
hora, el comando añadirá la noticia de última hora para el boletín de noticias de manera que
$boletín comprende ahora dos cadenas de texto.
Tipos de Cadena
PHP soporta dos tipos de cadenas que se denotan por el tipo de comillas que se utiliza. Si desea
asignar una cadena literal, preservando el contenido exacto, se debe utilizar la comilla simple
(apóstrofe) de esta manera:
En este caso, cada carácter dentro de la cadena de un solo citado se asigna a $info. Si se hubiera
usado comillas dobles, PHP habría intentado evaluar $variable como una variable.
Por otro lado, cuando se desea incluir el valor de una variable dentro de una cadena, lo hace
mediante el uso de cadenas entre comillas dobles:
Como te darás cuenta, esta sintaxis también ofrece una forma más simple de concatenación en la
que no es necesario utilizar un período, o cerrar y volver a abrir comillas, para añadir una cadena a
otra. Esto se conoce como la sustitución de variables y te darás cuenta de algunas aplicaciones lo
utilizan extensivamente y otras no lo usan en absoluto.
Caracteres de Escape
A veces una cadena debe contener caracteres con significados especiales que podrían ser
interpretados incorrectamente. Por ejemplo, la siguiente línea de código no funcionará, ya que la
segunda comilla encontrada en la palabra sister's le dirá al interprete PHP que el extremo de la
cadena ha sido alcanzado. En consecuencia, el resto de la línea será rechazada como un error:
Para corregir esto, se puede agregar una barra diagonal inversa inmediatamente antes las comillas
diciéndole a PHP que trate el carácter literalmente y no interpretarlo:
Y puedes realizar este truco en casi todas las situaciones en las que, de otro modo PHP devolverá un
error al tratar de interpretar un carácter. Por ejemplo, la siguiente cadena entre comillas dobles será
configurada correctamente:
Adicionalmente puede utilizar caracteres de escape para insertar varios caracteres especiales en
cadenas como tabulaciones, nuevas líneas y retornos de carro. Estos están representados, como
puede imaginar, por \ t, \ n, \ r. Aquí hay un ejemplo usando pestañas para trazar un rumbo; se
incluye aquí únicamente para ilustrar escapes, porque en las páginas web siempre hay mejores
formas de hacer diseño:
$heading = "Date\tName\tPayment";
Estos caracteres de barra inversa-precedida especiales sólo funcionan en cadenas entre comillas
dobles. En cadenas entre comillas simples, la cadena anterior se muestra con las secuencias feas \t
en lugar de tabuladores. Dentro de las cadenas con comillas simples, sólo la diagonal inversa con
apóstrofe (\ ') y la doble diagonal inversa (\ \) se reconocen como caracteres de escape.
PHP también ofrece una secuencia de líneas múltiples con el operador <<<, comúnmente conocida
como here-document o heredoc para abreviar, y es una manera de especificar una cadena literal, la
preservación de los saltos de línea y otros espacios en blanco (incluyendo sangrado) en el texto. Su
uso puede ser visto en el Ejemplo 3-8.
Lo que este código hace es decirle a PHP que muestre todo entre las dos etiquetas _END como si
fuera una cadena entre comillas dobles. Esto significa que es posible, por ejemplo, para un
desarrollador escribir secciones enteras de HTML directamente al código PHP y luego simplemente
reemplazar partes dinámicas específicas con variables PHP.
Es importante recordar que la etiqueta de cierre _END; debe aparecer a la derecha en el comienzo
de una nueva línea y debe ser la única cosa en esa línea, ni siquiera un se permite que se añada
después comentario (ni siquiera un solo espacio). Una vez que haya cerrado un bloque de líneas
múltiples, usted es libre de utilizar el mismo nombre de la etiqueta de nuevo.
NOTA: Recuerde el uso del constructor heredoc <<< _END ... _END; usted no tiene que añadir
el carácter \n de avance de línea para enviar un salto de línea simplemente pulse intro y empiece
una nueva línea. Además, a diferencia de cualquiera de las comillas o cadena delimitada por
comillas simples, usted es libre de utilizar todas las comillas simples y dobles que le gusten en un
heredoc sin escape, precedidas estas con una barra invertida (\).
Ejemplo 3-9 muestra cómo se utiliza la misma sintaxis para asignar varias líneas a una variable.
<?php
$author = "Alfred E Newman";
$out = <<<_END
This is a Headline
La variable $out luego se rellena con el contenido entre las dos marcas. Si usted fue anexando, en
lugar de ceder, podría también haber utilizado .= En lugar de = para anexar la cadena $out.
Por cierto, la etiqueta _END es simplemente una que yo elegí para estos ejemplos, ya que es poco
probable que sea utiliza en ningún otro lugar en el código PHP y por lo tanto único. Pero usted
puede utilizar cualquier etiqueta que desee, como _SECTION1 o _output y así sucesivamente.
Además, para ayudar a diferenciar etiquetas como está a partir de variables o funciones, la práctica
general es iniciar con un guion bajo, pero usted no tiene que utilizar uno si usted no lo elige.
Diseñar texto en varias líneas es por lo general sólo una conveniencia para que el código PHP sea
más fácil de leer, porque una vez que se muestra en una página web, las reglas de formato HTML
toman el control y los espacios en blanco se suprimen, pero $author todavía se sustituye por el valor
de la variable.
Escritura de Variables
PHP es un lenguaje escrito de manera muy informal. Esto significa que las variables no tienen que
ser declaradas antes de ser utilizadas, y que en PHP las variables siempre se convierten en el tipo
requerido por el contexto, cuando se accede a ellas.
Por ejemplo, puede crear un número de varios dígitos y extraer el enésimo dígito de este
simplemente suponiendo que sea una cadena. En el siguiente fragmento de código, los números
12345 y 67890 se multiplican entre sí, devolviendo un resultado de 838 102 050, que se coloca
luego en la variable $number, como se muestra en el Ejemplo 3-10.
<?php
$number = 12345 * 67890;
echo substr($number, 3, 1);
?>
Lo mismo vale para convertir una cadena en un número, y así sucesivamente. En el Ejemplo 3-11,
la variable $pi se establece en un valor de cadena, que luego se convierte automáticamente en un
número de punto flotante en la tercera línea de la ecuación para calcular el área de un círculo, que
da de salida el valor 78.5398175.
<?php
$pi = "3.1415927";
$radius = 5;
echo $pi * ($radius * $radius);
?>
En la práctica, lo que todo esto significa es que usted no tiene que preocuparse demasiado acerca de
los tipos de variables. Sólo les asignan los valores que tienen sentido para usted y PHP los
convertirá en lo necesario para caso. Entonces, cuando se quiere recuperar los valores, sólo hay que
preguntar por ellos; por ejemplo, con una declaración de echo.
Constantes
Las constantes son similares a las variables, que contiene información a la que puede accederse
más tarde, con la excepción de que son lo que parecen constantes. En otras palabras, una vez que
haya definido una, su valor se establece para el resto del programa y no se puede modificar.
Un ejemplo de uso de una constante podría ser la de mantener la ubicación de la raíz del servidor (la
carpeta con los archivos principales de su página web). Se podría definir esta constante de la
siguente manera:
define("ROOT_LOCATION", "/usr/local/www/");
Luego de leer el contenido de la variable que sólo se refieren a ella como una variable regular (pero
no va precedida de un signo de dólar):
$directory = ROOT_LOCATION;
Ahora, cada vez que usted necesite ejecutar el código PHP en un servidor con una configuración de
carpeta diferente, sólo tiene una sola línea de código para cambiar.
NOTA: Las dos principales cosas que hay que recordar acerca de las constantes es que no deben
ir precedidas de un signo $ (al igual que con las variables normales), y que pueden definirse sólo
con la función define.
En general se acepta como una buena práctica el utilizar sólo mayúsculas para los nombres de
variables constantes, especialmente si otras personas también van a leer su código.
Constantes predefinidas
PHP viene confeccionado con decenas de constantes predefinidas que por lo general van a ser
difíciles de usar como un principiante en PHP. Sin embargo, hay algunas conocidas como las
constantes mágicas, que le serán útiles. Los nombres de las constantes mágicas siempre tienen dos
guiones al principio y dos al final, por lo que no vas a querer tratar de nombrar alguna de tus
propias constantes con un nombre que ya está tomado. Se detallan en la Tabla 3-5. Los conceptos
mencionados en la tabla se introducirán en los próximos capítulos.
__METHOD__ El nombre del método de clase. (Añadida en PHP 5.0.0.) El nombre del
método se devuelve como fue declarado (mayúsculas y minúsculas).
Un uso práctico de estas variables es para propósitos de depuración, cuando se tiene que insertar
una línea de código para ver si el flujo del programa llega a ella:
Pero también existe una alternativa a echo que puede utilizar: print. Los dos comandos son bastante
similares entre sí, pero print es una función real que tiene un único parámetro, mientras que echo
constructor del lenguaje PHP.
En general, el comando echo será un poco más rápido que la producción de impresión de texto en
general, ya que, al no ser una función, no fija un valor de retorno.
Por otro lado, debido a que no es una función, echo no se puede utilizar como parte de una
expresión más compleja, mientras que print puede. He aquí un ejemplo de la salida si el valor de
una variable es verdadero o falso con print, algo que no podía llevar a cabo de la misma manera con
echo, porque se mostrará un mensaje de "Error de análisis":
En general, sin embargo, los ejemplos de este libro usan echo y recomiendo que lo haga así, hasta
llegar a un punto en el que el desarrollo de PHP descubra la necesidad de utilizar print.
Funciones
Las funciones se utilizan para separar las secciones del código que realizan una tarea en particular.
Por ejemplo, puede que a menudo sea necesario buscar una fecha y devolverla en un formato
determinado. Eso sería un buen ejemplo para convertir en una función. El código para hacerlo
podría ser de sólo tres líneas de largo, pero si lo tiene que pegar en su programa de una docena de
veces, estará haciendo su programa innecesariamente grande y complejo, a menos que utilice una
función. Y si usted decide cambiar el formato de los datos después, ponerla en una función significa
tener que cambiarlo en un solo lugar.
Si lo coloca en una función no sólo acorta su código fuente y lo hace más fácil de leer, sino que
también añade una funcionalidad adicional (nunca dicho mejor), ya que se pueden pasar parámetros
a funciones haciéndolas actuar de forma diferente. También pueden devolver valores al código de
llamada.
Para crear una función, declare esta de la manera mostrada en el ejemplo 3-12.
Ejemplo 3-12. Una simple declaración de una función.
<?php
function longdate($timestamp)
{
return date("l F jS Y", $timestamp);
}
?>
Esta función tiene una marca de tiempo Unix (un número entero que representa una fecha y hora en
función del número de segundos transcurridos desde las 00:00 am del 01 de enero 1970) como su
entrada y luego llama a la función date de PHP con la cadena de formato correcto para devolver una
fecha en el formato Miércoles 01 de agosto 2012. Cualquier número de parámetros se puede
transmitir entre los paréntesis iniciales, hemos decidido aceptar sólo uno. Las llaves encierran todo
el código que se ejecuta cuando se llama a la función.
Hasta la fecha de hoy de utilizar esta función, coloque la siguiente llamada en el código:
echo longdate(time());
Esta llamada utiliza la función integrada time de PHP para ir a buscar la marca de tiempo Unix
actual y pasa a la nueva función longdate, que devuelve la cadena adecuada para el comando echo
para mostrar. Si usted necesitara imprimir la fecha de hace 17 días, ahora sólo tiene que emitir la
siguiente llamada:
que pasa a longdate la marca de tiempo Unix actual menos el número de segundos desde hace 17
días (17 días x 24 horas x 60 minutos x 60 segundos).
Las funciones también pueden aceptar varios parámetros y devolver varios resultados, el uso de
técnicas que voy a desarrollar en los siguientes capítulos.
<?php
function longdate($timestamp)
{
$temp = date("l F jS Y", $timestamp);
return "The date is $temp";
}
?>
Aquí hemos asignado el valor devuelto por la función de la fecha en la variable temporal $temp,
que se inserta en la cadena devuelta por la función. Tan pronto como la función retorna, el valor de
$temp se borra, como si nunca hubiera sido utilizado en absoluto.
Ahora, para ver los efectos del ámbito de variables, echemos un vistazo a algún código similar, en
el ejemplo 3-14. Aquí $temp se ha creado antes de llamar a la función longdate.
<?php
$temp = "The date is ";
echo longdate(time());
function longdate($timestamp)
{
return $temp . date("l F jS Y", $timestamp);
}
?>
Sin embargo, como $temp ni fue creado dentro de la función longdate ni se le pasa como parámetro,
longdate no puede acceder a ella. Por lo tanto, este fragmento de código sólo produce la salida de la
fecha y no el texto precedente. De hecho, en primer lugar mostrará el mensaje de error "Notice:
Undefined variable: temp".
La razón de esto es que, por defecto, las variables creadas dentro de una función son locales a la
función y las variables creadas fuera de cualquier función sólo se puede acceder con el código del
no funcionamiento.
Algunas formas de reparar el Ejemplo 3-14 aparecen en los ejemplos 3-15 y 3-16.
Ejemplo 3-15. Reescribiendo para referirse a $ temp en su ámbito local, soluciona el problema
<?php
$temp = "The date is ";
echo $temp . longdate(time());
function longdate($timestamp)
{
return date("l F jS Y", $timestamp);
}
?>
Ejemplo 3-15 mueve la referencia a $temp de la función. La referencia aparece en el mismo campo
de aplicación en el que se define la variable.
<?php
$temp = "The date is ";
echo longdate($temp, time());
function longdate($text, $timestamp)
{
return $text . date("l F jS Y", $timestamp);
}
?>
La solución en el Ejemplo 3-16 $temp pasa a la función longdate como un argumento adicional.
longdate lee en una variable temporal que se crea llama $texto y emite el resultado deseado.
NOTA: Olvidar el alcance de una variable es un error de programación común, así que recordar
cómo funciona el alcance variables ayudarán a depurar algunos problemas bastante oscuros. A
menos que haya declarado una variable de lo contrario, su alcance se limita a ser local: ya sea
para la función actual o para el código fuera de cualquier función, dependiendo de si se crea o se
accede dentro o fuera de una función por primera vez.
Para declarar una variable como de alcance global, utilice la palabra clave global. Vamos a suponer
que usted tiene una forma de registro de los usuarios en su sitio web y quiere todo el código para
saber si está interactuando con un usuario registrado o un invitado. Una forma de hacer esto es crear
una variable global como $is_logged_in:
global $is_logged_in;
Ahora la función de inicio de sesión sólo tiene que asignar a esa variable 1 en el éxito de un intento
de inicio de sesión, o 0 en su fracaso. Debido a que el alcance de la variable es global, cada línea de
código en su programa puede acceder a esta.
Debe utilizar las variables globales con precaución, sin embargo. Recomiendo que se creen sólo
cuando no puede encontrar otra manera de alcanzar el resultado que desea. En general, los
programas que se rompen en pequeñas partes y los datos segregados son menos buggy y más fácil
de mantener. Si usted tiene un programa de miles de líneas (y algún día se quiere) en el que se
descubre que una variable global tiene un valor incorrecto en algún momento, ¿cuánto tiempo le
llevará encontrar el código que se establece de forma incorrecta?
Además, si usted tiene demasiadas variables globales, se corre el riesgo de usar uno de esos
nombres más a nivel local, o por lo menos pensar que ha usado de forma local, cuando en realidad
ya ha sido declarado como global. Toda clase de bichos raros puede surgir de este tipo de
situaciones.
Las variables estáticas
En la sección "variables locales" en la página 53, he mencionado que el valor de la variable se
elimina cuando termina la función. Si una función se ejecuta muchas veces, que se inicia con una
copia nueva de la variable y el valor anterior no tiene ningún efecto.
He aquí un caso interesante. ¿Qué pasa si usted tiene una variable local dentro de una función a la
que no desea que cualquier otra parte de su código tenga acceso, pero que también le gustaría
mantener su valor para la próxima vez que la función sea llama? ¿Por qué? Tal vez porque quieres
un contador para realizar un seguimiento de las veces que se llama a una función. La solución es
declarar una variable estática, como se muestra en el Ejemplo 3-17.
<?php
function test()
{
static $count = 0;
echo $count;
$count++;
}
?>
Aquí la primera línea de la prueba de la función crea una variable estática llamada $count y la
inicializa a un valor de cero. La siguiente línea da salida al valor de la variable, la final lo
incrementa en uno.
La próxima vez que la función sea llama, debido a que $count ya ha sido declarada, se omite la
primera línea de la función. Entonces, el valor previamente incrementado de $count se muestra
antes de que la variable se incremente de nuevo.
Si tiene previsto utilizar las variables estáticas, debe tener en cuenta que no se puede asignar el
resultado de una expresión en sus definiciones. Estas se pueden inicializar solamente con los
valores predeterminados (véase el Ejemplo 3-18).
<?php
static $int = 0; // Permitida
static $int = 1+2; // Rechazada (producirá un error de análisis)
static $int = sqrt(144); // Rechazada
?>
Estas superglobales contienen gran cantidad de información útil sobre el programa actualmente en
ejecución y su entorno (véase la Tabla 3-6). Se estructuran como arrays asociativos, un tema
discutido en el capítulo 6.
Tabla 3-6. Las variables superglobales de PHP
Todas los superglobales se nombran con un solo guión bajo inicial y sólo letras mayúsculas, por lo
tanto, se debe evitar nombrar a sus propias variables de esta manera para evitar posibles
confusiones.
Para ilustrar cómo usarlos, vamos a ver un poco de información que muchos sitios utilizan. Entre
las muchas pepitas de la información suministrada por las variables superglobales es la URL de la
página que hace referencia al usuario a la página web actual. Esta información página de referencia
se puede acceder de esta manera:
$came_from = $_SERVER['HTTP_REFERRER'];
Es así de simple. Oh, y si el usuario fue directo a su página web, tal como introducir la URL
directamente en el navegador, $came_from se establece en una cadena vacía.
Superglobales y seguridad
Una palabra de precaución estén listos antes de empezar a usar las variables superglobales, porque
son utilizadas a menudo por los hackers que tratan de encontrar exploits para irrumpir en su sitio
web. Lo que hacen es cargar $_POST, $_GET, u otras superglobales con código malicioso, como
comandos de MySQL o Unix que pueden dañar o mostrar los datos sensibles si ingenuamente
accedes a ellos.
Por lo tanto, siempre se debe desinfectar las superglobales antes de usarlas. Una forma de hacerlo es
a través de la función PHP htmlentities. Convierte todos los caracteres en entidades HTML. Por
ejemplo, los caracteres menor que y mayor que (<y>) se transforman en las cadenas < y >
para que estas se vuelvan inofensivas, como lo son todas las comillas y barras invertidas, y así
sucesivamente.
Por lo tanto, una mejor manera de acceder a $_SERVER (y otras superglobales) es:
$came_from = htmlentities($_SERVER['HTTP_REFERRER']);
Pero antes de seguir adelante, le recomiendo que pruebe con algunas (si no todas) de las siguientes
preguntas para asegurarse de que ha digerido completamente el contenido de este capítulo.