php manual de referencia holzner, steven(author)
TRANSCRIPT
, conteniendo un encabezado y una porcinde texto: Uso de PHP y
HTML juntosUso de PHP y HTML juntosAqu est su informacin PHP:
. . . Ahora, sta es la clave (puede insertar PHP en cualquier parte
de esta pgina y el motorde PHP del servidor Web lo ejecutar, en
tanto lo contengan las marcas ). Cuandose ejecute PHP, cualquier
cdigo HTML generado se insertar en la pgina, en el lugar de esePHP.
As que, por ejemplo, si desea mostrar la tabla de configuracin PHP
que genera la funcinphpinfo( ), podra llamar a esa funcin de esta
manera en la pgina Web: Uso de PHP y HTML juntosUso de PHP y HTML
juntos 27. 12PHP:Manual de referencia Aqu est su informacin
PHP:
Ahora bien, cuando el motor PHO ejecute esta pgina en el servidor,
el cdigo HTML pasar por el navegador sin cambios y el fragmento de
PHP ser ejecutado. Cualquier cdigo HTML que genere PHP se insertar
tambin en la pgina enviada al navegador. Dicha pgina se conoce como
phphtml.php, que puede ver en la Figura 1-6. Observe que el cdigo
HTML de la pgina aparece donde debe estar as como el cdigo HTML
generado por PHP. Desea dar a sus pginas un aspecto ms profesional?
Puede usar logotipos de PHP, dis- ponibles en
www.php.net/download-logos.php. El uso de estas imgenes
descargables en sus pginas Web, es para conferirles el aspecto
propio de PHP. Por ejemplo, as es como podra emplear la imagen
php-med-trans-light.gif en una pgina llamada phpimage.php (coloque
el archivo de imagen en el mismo directorio que phpimage.php en su
servidor): FIGURA 1-6 Combinacin de PHP y HTML 28. Captulo 1:
Fundamentos de PHP 13 Uso de PHP y HTML juntos Uso de PHP y HTML
juntossta es su informacin de PHP:
Y ver los resultados el logotipo se encuentra en la esquina
inferior derecha en laFigura 1-7.FIGURA 1-7 Uso de logotipos de PHP
29. 14 PHP: Manual de referencia Impresin de textoDe acuerdo, qu
tal si ahora imprimimos texto con PHP? Ya ha visto que puede
colocar textoen sus archivos PHP de manera muy similar a como lo
hara en una pgina HTML, como aqu,donde se coloca un encabezado y
texto en una pgina: Uso de PHP y HTML juntosUso de PHP y HTML
juntossta es su informacin de PHP: . . . Esto es correcto pero,
evidentemente, tambin esttico. El texto que se muestra no va
acambiar, sin importar lo que suceda en la parte de cdigo de su
pgina, y eso es claramenteinaceptable. Qu pasa si desea presentar
resultados de una bsqueda en una base de datos oreservacin de
boletos? Necesita insertar texto en la pgina manejando PHP y, para
hacerlo, se emplea la instruccinecho de PHP. Por ejemplo, parahacer
ecodel textoBienvenido a PHPen la pgina Web devueltaal navegador,
se podra agregar esta lnea de cdigo a una nueva pgina,
phpdisplaytext.php: Mostrando texto de PHP Mostrando texto de
PHPEsto es lo que PHP tiene que decir:
Observe esta pgina, phpdisplaytext.php, en su navegador ahora, como
se muestra en laFigura 1-8. Ver el texto que PHP insert en la pgina
de la figura (nada mal). 30. Captulo 1: Fundamentos de PHP15FIGURA
1-8 Cmo mostrar texto desde PHPPuede pasar texto para mostrar la
instruccin echo, empleando comillas sencillas o dobles: echo
"Bienvenido a PHP."; echo Bienvenido a PHP.;Hay una diferencia
sutil entre estas dos formas de pasar texto, que ver en el
siguientecaptulo. Tambin puede pasar nmeros directamente para hacer
eco si lo desea, sin recurrira comillas: echo 1234.5678;Y puede
pasar texto entre parntesis para hacer eco tambin: echo
("Bienvenido a PHP.");El paso de datos a funciones tambin se
realiza de esta forma: coloque los datos dondedesee que la funcin
opere, entre parntesis. Hay muchas funciones integradas en PHP;
sinembargo, echo, tcnicamente hablando, no es una funcin es una
caracterstica integrada dellenguaje PHP. 31. 16PHP:Manual de
referencia Impresin de HTML Nunca olvide que cuando trabaja con PHP
en lnea, interacta con el usuario a travs de un navegador. Eso
significa que el texto enviado por usted de vuelta al navegador se
interpretar como HTML, no un texto simple. Eso da tambin la
posibilidad de utilizar HTML para dar for- mato a su texto, tal y
como se indica aqu en una nueva muestra, phpdisplayhtml.php:
Mostrando texto de PHP Mostrando texto de PHP Esto es lo que PHP
tiene que decir:
Puede ver esta pgina en la Figura 1-9 incluyendo el formato en
HTML.FIGURA 1-9 Cmo mostrar HTML desde PHP 32. Captulo
1:Fundamentos de PHP 17As que cuando quiera pasar a la siguiente
lnea en su resultado, deber insertar el comandoHTML correcto,
, en el texto que se muestra.Mayor poder de echoTambin puede
ejecutar PHP desde la lnea de comandos, simplemente utilizando el
comandophp. Esto es lo que vera ejecutando el archivo
phpdisplayhtml.php desde la lnea de comandos(recuerde que %
representa un smbolo de sistema genrico en este libro):%php
phpdisplayhtml.php Mostrando texto de PHPMostrando texto de PHPEsto
es lo que PHP tiene que decir:
Bienvenido
a
PHP.Observe que el cdigo HTML no se interpret como HTML; se
imprimi como textosimple. Si, en este caso, desea pasar a la lnea
siguiente, debe utilizar el carcter de control n, quePHP
interpretar como carcter de lnea nueva (ste mostrar las tres
palabras en sus propiaslneas):echo "Bienvenidon";echo "an";echo
"PHP.";ste es un ejemplo de los caracteres de control disponibles
en PHP:n Carcter de lnea nuevar Cambio de lneat Tabulador Muestra
una $ Muestra un signo $" Muestra una"0 a 777 Muestra un carcter
correspondiente a un cdigo hexadecimal (de base 8)x0 a xFF Muestra
un carcter correspondiente a un cdigo hexadecimal (de base 16) 33.
18PHP:Manual de referenciaPuede imprimir un carcter sensible como
una comilla ("), sin decir a PHP que ha llegado al final de su
texto (lo que una marca " hara en su defecto). Para esto, use " en
su lugar de esta forma: echo "l dijo, "Me gusta el helado."";A esto
se le conoce como escapar de la comilla, para que PHP la muestre en
lugar de tratarla como marca al final de una cadena de texto.Si lo
desea, puede dividir una cadena entrecomillada larga en varias
lneas en su escrito,para conservar los cambios de lnea si imprime
desde la lnea de comando. (Si imprime enuna pgina Web, los cambios
de lnea sern pasados por alto): Tambin puede separar los elementos
que desea imprimir con comas, de esta forma: echo "Bienvenido",
"a", "PHP."; Todos los elementos que imprima de esta forma
aparecern en la impresin, uno detrs del otro: BienvenidoaPHP. Si
desea espacios entre las palabras, haga algo como esto: echo
"Bienvenido ", "a ", "PHP."; Esto producira Bienvenido a PHP.
Tambin puede ensamblar cadenas de texto en una sola utilizando un
punto (.). ste es un ejemplo: echo "Bienvenido " . "a " . "PHP.";En
este caso, PHP toma su expresin "Bienvenido" . "a " . "PHP." y la
ensambla junta (a esto se le llama concatenacin) en una cadena,
"Bienvenido a PHP."; luego pasa esa cadena a la instruccin
echo.Adems, existe otra forma de mostrar texto: puede usar tambin
la instruccin print de PHP con la misma sintaxis, as: print
Bienvenido a PHP.;. Cul es la diferencia entre print y echo? No
mucho; print es ms una funcin de PHP (vea el captulo 5), de modo
que produce un 34. Captulo 1: Fundamentos de PHP 19valor siempre
iniciado en 1. Para la mayora de los fines, echo y print funcionan
igual en PHP, demodo que el uso de cada una depender de usted.Uso
de documentos here de PHPDe hecho, hay otra forma de mostrar texto
que debe conocer y consiste en usar documentoshere de PHP. Un
documento here es tan slo texto inserto directamente en una pgina
PHP,entre dos instancias del mismo token; ese token es una palabra,
como END. Luego puede mos-trar el texto en un documento here
utilizando la sintaxis echo Esto es lo que obtendra al ejecutar la
instruccin a travs del CLI con la opcin l:%php -l echoer.phpPHP
Parse error: syntax error, unexpected T_STRING, expecting , or ; in
echoer.php on line 2Errors parsing echoer.phpEs el mismo error que
obtendra de PHP en lnea (php-cgi). Debe saber que el resultado
producido por CLI difiere de php-cgi; por ejemplo, en CLI no
seincluyen encabezados HTTP estndar que imprime php-cgi al devolver
el resultado al navegador.Y el CLI imprime los mensajes de error en
texto simple, no en cdigo HTML que dar php-cgi. 39. 24 PHP: Manual
de referencia Tambin vale la pena observar que en Linux y Unix,
pueden ejecutarse scripts PHP con sloescribir el nombre del script
en la lnea de comandos, si indica dnde encontrar PHP con unalnea
que inicia con los caracteres #!:#! /usr/bin/php Adicin de
comentarios a cdigo de PHPAl igual que virtualmente todos los
lenguajes de programacin, se pueden agregar comenta-rios al cdigo
PHP. Los comentarios son anotaciones agregadas por usted para hacer
su cdigolegible y omitido por PHP. Es importante agregar
comentarios si el cdigo es extenso, ya que esposible que usted o
alguien ms revise el cdigo tiempo despus y no tenga la menor ideade
para qu sirve. Puede reconstruir laboriosamente lo que sucede, pero
por qu no agregarcomentarios que faciliten el proceso? De esa forma
puede descifrar su viejo cdigo (o de alguienms) con facilidad.
Existen tres tipos de comentarios en PHP. El primer tipo de
comentario permite crearcomentarios en diferentes lneas, que
comiencen con /* y terminen con */, de esta forma:Eso es genial si
tiene un comentario extenso que ocupar mltiples lneas para
mostrarse.Sin embargo, algo que vuelve loco a PHP es que el usuario
anide comentarios, que comienzancon /* y terminan con */, de esta
forma: PHP busca */ para marcar el final del comentario y si anida
comentarios dentro de otros,encontrar */ antes del final real del
comentario. Los otros dos tipos de comentarios son de una lnea.
Este tipo de comentarios slo seextienden a una lnea, no como los
del tipo multilneas /*...*/. El primer tipo de comentario deuna
lnea comienza con //: 40. Captulo 1: Fundamentos de PHP25 Y el
siguiente tipo de comentario en una lnea funciona de la misma
forma, salvo quecomienza con el signo #: De hecho, PHP pasa por
alto todo despus de la doble barra // o el signo #; de ese
modotambin puede colocar comentarios de un rengln al final de las
lneas, despus de cdigo PHPvlido como ste:Puede utilizar, incluso,
comentarios en una lnea para hacer bloques de comentarios en
sucdigo PHP, similares a comentarios multilneas, como ste: Desea
algo que destaque realmente, en trminos de comentarios? Pruebe algo
como esto: No es necesariamente bonito, pero capta su atencin.
Probablemente descubrir que utiliza ms comentarios en una lnea que
en mltipleslneas. Los comentarios en una lnea son ms fciles de
escribir, pues no tiene que llevar el con-trol del punto final del
comentario. Sin embargo, los comentarios en mltiples lneas son
tilestambin en PHP, y los ver con frecuencia en la definicin de
funciones de PHP, explicando qudatos pasa a la funcin y cules
recibe de vuelta. 41. 26 PHP: Manual de referencia Trabajo con
variablesHasta este punto, el texto producido por nuestros scripts
ha sido esttico. En este caso, porejemplo, el script muestra slo el
texto Bienvenido a PHP.:Eso es texto bastante esttico. Puede hacer
aadiduras con el operador de adicin de PHP,+, para agregar nmeros
de esta forma: sta es la respuesta La respuestaLa primera vez que
ejecuta esto se muestra el mensaje sta es la respuesta: 14. Y la
segundavez que se ejecuta, vuelve a mostrar el mensaje sta es la
respuesta: 14.As que es lo mismose vuelve a obtener texto esttico.
Esto est bien hasta donde llega, pero no muy lejos. Si slo deseara
texto esttico, podraquedarse con HTML. Es ah donde las variables
entran en accin. Como en cualquier otrolenguaje de programacin, las
variables de PHP son ubicaciones en la memoria con nombresasignados
alojando datos. Suponga por ejemplo que deseara llevar el control
del nmero deusuarios de su sitio en tres ciudades Pars, Londres y
Acapulco, pero el nmero de usuariosen cada lugar no se conoce hasta
ejecutar el programa. Las variables llegan al rescate. Con las
variables, usted podra almacenar el nmero de usuarios en la
variable de cadaciudad al momento de la ejecucin. En PHP, los
nombres de variables comienzan con un signo$, seguido de un nombre
y ese nombre debe comenzar con una letra o lnea de subrayado, nocon
un nmero. Por ejemplo, para almacenar el nmero de usuarios en Pars,
podra tener unavariable llamada $pars; el nmero de usuarios en
Londres y Acapulco podra estar en las varia-bles $londres y
$acapulco. Podra colocar datos en esas variables al momento de la
ejecucin ysumar los tres elementos de datos, tambin al momento de
la ejecucin. La suma se vera as: sta es la respuesta La respuesta
42. Captulo 1: Fundamentos de PHP27 Al momento de la ejecucin, el
valor dentro de cada variable se sustituye por esa variable; de
modo que si $pars = 1, $londres = 5 y $acapulco = 8, PHP podra ver
la lnea anterior de cdigo PHP de esta forma: Y entonces obtiene sta
es la respuesta: 14. (la misma que antes). Pero ahora supongamos
que las tres variables alojaran 2, 4 y 6 al momento de la ejecucin,
con lo que obtendra Entonces obtiene sta es la respuesta: 12. lo
que significa que nuestro mensaje ya no es esttico. sa es la razn
por la que se llaman variables los datos que contienen pueden
variar. se es el primer paso para trabajar con datos en PHP: usar
variables para almacenar datos. As que, cmo almacenar exactamente
datos en variables?Almacenaje de datos en variables En PHP, como
otros lenguajes, puede asignar datos a variables. PHP le permite
almacenar nmeros y texto en dichas variables, como en estos
ejemplos: $pi = 3.1415926535; $nmero_de_Saturnos = 1; $nombre =
"Klostix Daz"; $pez = "bacalao"; A diferencia de otros lenguajes en
lnea, como Java, PHP no insiste en que usted cree dife- rentes
tipos de variables para cada dato. sta es la forma en que tales
variables podran crearse en Java: double pi = 3.1415926535; int
nmero_de_Saturnos = 1; String nombre = "Klostix Daz"; String pez =
"bacalao"; PHP puede almacenar todo tipo de datos en variables y no
tiene que crear diferentes tipos de variables para almacenar esos
datos, que facilita mucho las cosas. Por otra parte, en virtud de
la arquitectura interna de las computadoras, PHP almacena
internamente sus datos en diferentes formatos y a veces es
importante saber cules son esos formatos internos (hablaremos ms de
esto despus). 43. 28 PHP:Manual de referenciaObserve el uso del
signo =, se utiliza para asignar datos a variables. El signo = es
el operador deasignacin en PHP, que le permite encuadrar datos a
variables. (De hecho, existen otros operadoresde asignacin, como se
ver en el siguiente captulo; pero el signo = es el principal.) Por
ejemplo,para inicializar el nmero de hamburguesas con queso de su
cdigo en 1, usted hara esto:Luego podra transmitir el nmero actual
de hamburguesas con queso al navegador:Ahora podra cambiar el nmero
almacenado en la variable $hamburguesasconqueso con-forme se
sumaran ms hamburguesas en lnea. Por ejemplo, si tiene tres
hamburguesas ms,podra utilizar el operador + de PHP para sumarlas
al nmero actual almacenado en $hambur-guesasconqueso de esta forma:
Ahora puede mostrar el nuevo nmero de hamburguesas con queso en
este ejemplo,phpvariables.php, de la siguiente forma: Almacenar
datos en variables Almacenar datos en variables 44. Captulo 1:
Fundamentos de PHP 29 Puede ver phpvariables.php en la Figura 1-11
donde, como apreciar, el valor almacenado en $hamburguesasconqueso
cambi exitosamente. En algunos lenguajes, como Java, tienen que
declararse variables, dando su tipo y nombre, antes de usarlas,
como double pi; int nmero_de_Saturnos = 1; En PHP no tiene que
declarar variables antes de usarlas otra forma en que PHP ahorra
tiempo y esfuerzo. Todo lo que debe hacer antes de usar una
variable en PHP, consiste en asignar valor cuando lo haga, PHP
crear esa variable por usted y almacenar sus datos FIGURA 1-11 Cmo
poner las variables a trabajar en PHP 45. 30PHP: Manual de
referencia en ella. Sin embargo, eso significa que debe asignar
datos a una variable antes de leer el valor de la misma. Por
ejemplo, si intentara leer el nmero de hamburguesas con queso sin
antes inicializarlo, obtendra el error en la Figura 1-12. ste es el
mensaje de error: PHP Notice: Undefined variable:
hamburguesasconqueso in C:Inetpubwwwrootch01 phpvariables.php on
line 14 PHP Notice: Undefined variable: hamburguesasconqueso in
C:Inetpubwwwrootch01phpvariables.php on line 16 Desea anular una
variable? Resulta difcil pensar en aquellas ocasiones que usted
podra ya no desear el uso de una variable, pero en realidad puede
anular variables en PHP. Tan slo use un cdigo como ste: unset
($hamburguesasconqueso);Despus de ejecutar esta instruccin de PHP,
la variable $hamburguesasconqueso ya no existir ni obtendra un
error, si intentara leer el valor que sta contena. FIGURA 1-12
Cuando olvida inicializar una variable en PHP 46. Captulo 1:
Fundamentos de PHP 31Interpolacin de cadenas Puede mostrar el valor
de una variable como sta, desde luego: En este caso, usted ha
colocado explcitamente $hamburguesasconqueso en la lista de ele-
mentos cuyos valores desea mostrar. Por otra parte, hay una forma
abreviada de hacer esto en PHP que debe conocer, llamada
interpolacin de cadenas.Cuando usted usa la interpolacin, slo tiene
que colocar la variable cuyo valor desea inser- tar, dentro de una
cadena de texto con comillas dobles (no con comillas sencillas).
Por ejemplo, podra convertir el ejemplo phpvariables.php anterior
para usar la interpolacin de cadenas, en un nuevo ejemplo llamado
phpinterpolation.php, de esta forma: Uso de la interpolacin de
cadenas Uso de la interpolacin de cadenas Observe cmo funciona
esto: PHP ve el nombre de una variable, $hamburguesasconqueso,
dentro de una cadena de texto con comillas dobles:echo "Nmero
actual de hamburguesas con queso: $hamburguesasconqueso
"; Eso significa que PHP colocar de inmediato el valor alojado en
$hamburguesasconqueso en la cadena, de esta forma:echo "Nmero
actual de hamburguesas con queso: 1
"; Es as como funciona la interpolacin de cadenas; PHP sustituir el
valor de una variable por aquella en una cadena de texto con
comillas dobles. Puede ver phpinterpolation.php en accin en la
Figura 1-13. La interpolacin de cadenas es un atajo rpido que
permite colocar el valor de una variable en una cadena con comillas
dobles (no con comillas sencillas), pero hay algo que debe saber
47. 32PHP: Manual de referencia FIGURA 1-13 Uso de la interpolacin
de cadenas en PHP aqu: necesita rodear el nombre de la variable con
espacios o puntuacin simple. Si coloca el nombre de la variable
directamente junto al texto, podra confundir a PHP. Por ejemplo, si
la variable $tipo aloja el texto balon y desea insertar el texto
baloncesto en texto con comillas dobles, podra verse tentado a
utilizar la expresin $tipocesto. Y eso no funcionar; ver el aviso
PHP Notice: Undefined variable:tipocesto en C:phpwrong.php on line
8 La solucin consiste en encerrar el nombre de la variable entre
llaves, como stos: {$tipo}, creando la expresin ${tipo}cesto, como
se puede apreciar en phpadjoininginterpolation.php: Uso de
interpolacin de variables con palabras adjuntas Uso de interpolacin
de variables con palabras adjuntas 48. Captulo 1: Fundamentos de
PHP33 FIGURA 1-14 Uso de la interpolacin de cadenas con texto
adjunto en PHP Ahora funciona, como se ve en la Figura 1-14. La
interpolacin de cadenas es til, pero podra no utilizarla todo el
tiempo. Por ejemplo, qu sucede si tiene la cadena de texto:
Conseguimos muy buen precio en la comida fue $barato incluso para
Jessica.?). As como se plantea, confundir a PHP, que intentar
hallar una variable llamada $barato y dar un error cuando no pueda
encontrarla. Existen dos soluciones a este problema; primero, podra
usar comillas sencillas en vez de dobles, as: Conseguimos muy buen
precio en la comida fue $barato incluso para Jessica.. Cuando se
utilizan comillas sencillas, PHP no aplica la interpolacin de
cadenas. La segunda forma de evitar interpolacin cuando no la desea
pero an pretende usar comillas dobles consiste en anular el nombre
de la variable colocando antes del signo $ una diagonal inversa (),
que da como resultado: Conseguimos muy buen precio en la comida fue
$barato incluso para Jessica.. PHP ver el smbolo $ y lo convertir
en un smbolo $ inocuo, como debe ser aqu, no el inicio de un nombre
de variable. Eso es interpolacin de cadenas si desea colocar el
valor de una variable en una cadena con comillas dobles, sta es la
herramienta para usted.Creacin de variables alternas Mientras
analizamos las variables, tambin vale la pena analizar variables
alternas. PHP permite stas para alojar el nombre de otra variable.
49. 34PHP: Manual de referenciaAs es como funciona. Podra tener una
variable llamada $hamburguesasconqueso, a la que podra dar un valor
de 1: Luego podra crear una nueva variable, $tipodehamburguesa, que
aloje el nombre de la pri- mera variable,hamburguesasconqueso: Sabe
que puede mostrar el valor en $hamburguesasconqueso de esta forma:
Resulta que tambin puede tener acceso al valor en
$hamburguesasconqueso mediante la variable alterna,
$tipodehamburguesa, de esta forma: Observe la sintaxis como
$tipodehamburguesa contiene el texto hamburguesasconqueso, la
expresin $$tipodehamburguesa es equivalente a
$hamburguesasconqueso. Desea utilizar variables alternas con
interpolacin de cadenas? PHP tendr problemas con una expresin como
$$tipodehamburguesa entre comillas dobles; de modo que la forma de
corregir eso consiste en utilizar phpvariablevariables.php: 50.
Captulo 1: Fundamentos de PHP35 Uso de variables alternas Uso de
variables alternas Si no hubiera usado los llaves en este ejemplo,
habra obtenido el siguiente resultado: Nmero de hamburguesas con
queso: 1 Ese nmero de nuevo: 1 Una vez ms: $hamburguesasconqueso
Ahora mismo, las variables alternas podran parecer poco ms que una
curiosidad, pero tienen sus usos cuando se trabaja con ciclos y
matrices, que se analizan en el captulo 3.Creacin de constantes A
veces no desea que un elemento de datos sea variable. Por ejemplo,
el valor de pi, 3.1415926535, no debe cambiar. Si creara una
variable llamada $pi, algo en su cdigo podra asignar un nuevo valor
a $pi por error. Lo que debe hacer es crear una constante, cuyo
valor no se pueda modificar.En PHP, una constante se crea con la
funcin define, pasando a define el nombre de la cons- tante que
desea crear y el valor que quiere asignarle, como define (PI,
3.1415926535). Eso crea una constante llamada PI distinguiendo
entre maysculas y minsculas: PI no es lo mismo que pi (si quiere
que una constante no distinga entre maysculas y minsculas, puede
pasar un valor TRUE como ste: define (PI, 3.1415926535, TRUE)).
Observe que esto simplemente crea una constante llamada pi no se
utiliza un signo $ frente al nombre, porque la convertira en
variable.As es como funciona la creacin de una constante en un
archivo de ejemplo phpconstant.php: Definicin de constantes 51.
36PHP:Manual de referencia Definicin de constantes Y puede ver los
resultados de la Figura 1-15, donde la constante se cre en
realidad. As, sa es la idea tras las constantes (si intenta alterar
el valor de esta constante, pi (por ejemplo, pi = 3.14), PHP no lo
aceptar, ni siquiera iniciar el script). Esto es algo de tomar en
cuenta: como a las constantes no se les antepone un prefijo $, PHP
se puede confundir si utiliza una constante con el mismo nombre de
una de las palabras clave reservadas a PHP. Estas palabras clave
aparecen en la Tabla 1-1. Asimismo, existen varias constantes
predefinidas disponibles para sus scripts. Utilizaremos estas
constantes conforme las necesitemos; ste es un ejemplo: _LINE_ El
nmero de lnea actual del archivo _FILE_ La ruta completa y el
nombre del archivo _FUNCTION_ El nombre de la funcin _CLASS_ El
nombre de la clase _METHOD_ Nombre del mtodo de clase PHP_VERSION
Versin de PHP _CLASS__FILE__FUNCTION_ _LINE_ _METHOD_ and arrayas
breakcasecfunctionclass constcontinuedeclaredefault diedoecho else
elseif empty enddeclare endfor endforeach endif endswitchendwhile
eval exception exit extends forforeach function global if include
include_once isset list new old_function or php_user_filterprint
requirerequire_once return staticswitch unset usevar whilexor TABLA
1-1Palabras clave de PHP 52. Captulo 1: Fundamentos de PHP37 FIGURA
1-15 Definicin de constantes PHP_OS El sistema operativo
DEFAULT_INCLUDE_PATH Donde PHP buscar lo que necesita Por ejemplo,
el uso de echo_LINE_ en la ubicacin especfica de un script mostrar
la lnea actual en ejecucin.Entendamos los tipos de datos internos
de PHP PHP le hace un gran favor al permitirle almacenar datos sin
especificar el tipo. En otros lengua- jes necesita establecer el
formato exacto de los datos de cada variable, pero PHP se encarga
de eso por usted.Sin embargo, a veces tiene que conocer los tipos
de datos internos usados por PHP, como ver a continuacin. stos son
esos tipos internos: boolean Aloja valores verdaderos/falsos
integer Aloja nmeros como -1, 0, 5, etctera. float Aloja nmeros de
punto flotante (dobles), como 3.14159 o 2.7128 string Aloja texto
como Bienvenido a PHP. array Aloja matrices de elementos de datos
object Aloja objetos de programacin resource Aloja un recurso de
datos NULL Aloja un valor NULL (nulo) 53. 38PHP: Manual de
referencia PHP suele manejar los tipos de sus datos automticamente.
Por ejemplo, esta instruccin crea una variable alojando una cadena:
$datos = "Son muchas hamburguesas con queso las que tiene ah.";
Esta instruccin crea una variable que aloja un nmero flotante
internamente: $datos = 123.456; ste es un ejemplo que crea una
variable booleana (TRUE/FALSE, VERDADERO/FALSO): $datos = TRUE;Todo
eso est bien; el problema se presenta cuando mezcla tipos de datos.
Por ejemplo, si comienza con una variable simple inicializada en 0
entonces eso crea una variable que contiene la cadena 0. Ahora
bien, qu sucede si suma 1 al valor de esa variable?: En este caso,
PHP hace lo mejor que puede; sumar el nmero 1 a la cadena 0 deja
$varia- ble alojando el entero 1. Qu sucede si suma un valor de
punto flotante? Ahora $variable aloja un valor flotante de 2.2. Qu
pasa si suma 3 + 8 hamburguesas con queso? De nueva cuenta, PHP har
su mejor esfuerzo, sumando 3 + 8 y dejando el resultado, un valor
entero de 11, como resultado: 54. Captulo 1: Fundamentos de PHP39
Debe evitar la confianza en estas reglas. Estn integradas en PHP,
pero confiar en ellas podra darle un resultado equivocado. Si desea
convertir un valor de un tipo de datos a otro, puede usar
explcitamente un tipo de datos combinado. Los tipos de datos
combinados se ponen entre parntesis; por ejemplo: $entero =
(integer) $datos; convierte explcitamente el valor de $datos a
entero. El siguiente convierte el valor en $datos en un valor
$flotante: $flotante = (float) $datos; Cuando se hace la conversin
al tipo booleano, estos valores se consideran FALSE (falsos): El
booleano FALSE El entero 0 El flotante 0 La cadena vaca y la cadena
0 Una matriz con cero elementos Un objeto sin variables miembros Un
tipo especial NULL (incluyendo valores no inicializados) Cualquier
otro valor se considera TRUE (verdadero).Cuando se convierte al
tipo entero, stas son las reglas: Un booleano FALSE producir 0
(cero) y el booleano TRUE producir 1 (uno). Los valores de tipo
flotante se redondearn a cero. Cuando se convierten datos al tipo
flotante, PHP convierte primero los datos a entero y luego a
flotante. Tambin puede convertir el tipo de cadena a tipos
numricos, pero es un poco enredado vea el captulo 3 para conocer
los detalles. Asimismo, PHP incluye funciones especiales que le
permiten comprobar el formato interno de los datos is_int( ),
is_float( ), is_array( ), etctera; por ejemplo, si pasa una
variable alma- cenada por PHP como entero internamente en is_int(
), esa funcin producir un valor TRUE en el siguiente captulo
ahondaremos en este tema. 55. CAPTULO 2Operadores y control de
flujoE l captulo 1 fue una introduccin a PHP y este captulo
profundiza ms en el tema. Todo lo que ver en este captulo es una
habilidad esencial para el resto del libro.En este captulo se
analizan operadores de PHP que usted emplear para manipulardatos;
sta es parte esencial de los fundamentos de PHP que necesitar. Por
ejemplo, la expre-sin $variable + 8, suma 8 al valor en $variable.
La expresin $variable * 4, multiplica el valor de$variable por 4.
Incluso si ha visto operadores en otros lenguajes, al menos revise
este material,pues encontrar contenido exclusivo de PHP. Tambin ver
todo sobre control del flujo en este captulo. ste le permite tomar
decisionesen su cdigo. Va a tener un da de campo? Puede decidir
basndose en la temperatura ambienteactual, segn cdigo PHP. Tiene
suficiente inventario para surtir pedidos de sus clientes? Denuevo,
es cuestin de control del flujo. En PHP, como otros lenguajes, la
instruccin principal decontrol del flujo es la instruccin if, que
permite tomar una decisin y ejecutar cierto cdigo, si esadecisin se
orienta hacia un lado y cdigo alternativo si la decisin apunta
hacia el otro. Adems de instrucciones como if, tambin analizaremos
ciclos. Los ciclos son fundamen-tales para PHP, como para muchos
lenguajes de programacin; permiten manipular grandesconjuntos de
datos recorrindolos en ciclos, un elemento de datos a la vez. Las
computadorasfueron creadas para realizar tareas repetitivas como
stas, de modo que los ciclos tienen unlugar preponderante en
PHP.Operadores matemticos de PHPComenzaremos con los operadores ms
bsicos (los matemticos), que son stos: + Suma dos nmeros Resta un
nmero de otro * Multiplica dos nmeros / Divide un nmero entre otro
%Devuelve el residuo, cuando un nmero se divide entre otro
(mdulo)41 56. 42PHP: Manual de referencia Estos operadores
funcionan como sera de esperarse: para sumar dos valores se utiliza
el operador +, de esta forma: a + b. Para restar b de a, es a b.
Bueno, es momento de escribir algo de cdigo. ste es un ejemplo,
phpmathoperators.php, que pone a trabajar los operado- res
matemticos: Uso de los operadores matemticos Uso de los operadores
matemticos Puede ver resultados en la Figura 2-1, donde los
operadores matemticos ejecutan sus funciones. FIGURA 2-1 Operadores
matemticos de PHP en accin 57. Captulo 2: Operadores y control de
flujo 43Este ejemplo demuestra el uso de operadores matemticos con
dos nmeros, 7 y 2, perodesde luego puede usar variables
tambin:$resultado = $operando1 + $operando2;$resultado = $operando1
- $operando2;$resultado = $operando1 * $operando2;$resultado =
$operando1 / $operando2;$resultado = $operando1 % $operando2; Adems
de los operadores matemticos integrados, PHP tambin cuenta con
varias funcio-nes matemticas y, mientras analizamos los operadores
matemticos, bien vale la pena dar unvistazo a las funciones
matemticas. stas son: abs Valor absoluto acos Arco coseno acosh
Coseno hiperblico inverso asin Arco seno asinh Seno hiperblico
inverso atan2 Arco tangente de dos variables atan Arco tangente
atanh Tangente hiperblica inversa base_convert Convierte un nmero
entre bases bindec Convierte de binario a decimal ceil Redondea
fracciones hacia arriba cos Coseno decbin Convierte de decimal a
binario dechex Convierte de decimal a hexadecimal decoct Convierte
de decimal a octal deg2rad Convierte el nmero en grandes al
equivalente en radianes exp Calcula el exponente de e expm1
Devuelve exp(nmero) 1 floor Redondea fracciones hacia abajo fmod
Devuelve el residuo de punto flotante de la divisin de los
argumentos getrandmax Muestra el mayor valor aleatorio posible
hexdec Convierte de hexadecimal a decimal hypot Devuelve
sqrt(num1*num1 + num2+num2) is_finite Determina si un valor es un
nmero finito vlido is_infinite Determina si un valor es infinito
is_nan Determina si un valor no es nmero 58. 44PHP: Manual de
referencia lcg_value Generador de congruencia lineal combinado
log10 Logaritmo de base 10 log1p Devuelve log(1 + nmero) log
Devuelve el logaritmo naturalmax Encuentra el valor ms altomin
Encuentra el valor ms bajomt_getrandmax Muestra el mayor valor
aleatorio posiblemt_rand Genera un mejor valor aleatoriomt_srand
Siembra el mejor generador de nmeros aleatoriosoctdec Convierte de
octal a decimalpi Obtiene el valor de pipow Expresin
exponencialrad2deg Convierte el nmero de radianes a un equivalente
en gradosrand Genera un entero aleatorioround Redondea un nmero
flotantesin Senosinh Seno hiperblicosqrt Raz cuadradasrand Siembra
el generador de nmeros aleatoriostan Tangentetanh Tangente
hiperblica ste es un ejemplo, phpmathfunctions.php, que pone a
trabajar algunas de estas funciones. Por ejemplo, usted podra
querer la tangente de 45 y utilizara la funcin tan para ello. La
fun- cin tan espera que su operando est en radianes; de modo que
primero debe convertir 45 a radianes, que puede hacer con la funcin
deg2rad: Qu tal si calculamos ahora un exponente? Puede calcular 4
elevado a la potencia 3, es decir 43, utilizando la funcin pow: 59.
Captulo 2: Operadores y control de flujo 45Puede redondear nmeros
hacia abajo utilizando la funcin floor o bien, usando la
funcinceil. En este ejemplo, redondeamos pi hacia abajo: Qu tal un
poco de matemticas hexadecimales? La funcin dechex convierte
valores deci-males a hexadecimales de esta forma: Y puede obtener
el arco tangente de 1 con la funcin atan, convirtiendo la respuesta
enradianes a grados en phpmathfunctions.php de esta forma: Uso de
las funciones matemticas Uso de las funciones matemticasPuede ver
phpmathfunctions.php en la Figura 2-2, funcionando segn lo
planeado. 60. 46 PHP:Manual de referenciaFIGURA 2-2 Funciones
matemticas de PHP en accin Trabajando con los operadores de
asignacinEl operador de asignacin principal es =, que simplemente
asigna un valor, como ste, almace-nando el valor 99 en
$botellas_de_cerveza_en_la_pared:$botellas_de_cerveza_en_la_pared =
99;Esto es algo ms que debe saber acerca del operador de asignacin:
puede hacer mltiplesasignaciones en la misma lnea, de esta
forma:Esta lnea de cdigo asigna el valor 3 a cada una de las
variables $a, $b, $c y $d. Es bastante til.Ahora d un vistazo a
estas lneas de cdigo: 61. Captulo 2: Operadores y control de flujo
47La idea aqu es que asignamos un valor de 3 a la variable $a y
luego sumamos 6 a ese valor,para terminar con 9 en $a. PHP
proporciona un conjunto de operadores de asignacin de com-binacin;
de modo que si desea contraer una lnea como $a = $a = 6, puede usar
el operador deasignacin de combinacin +=. El operador =+ combina
los operadores + e = de tal modo, queesta lnea:$a = $a + 6;funciona
igual que esta otra:As, los operadores de asignacin de combinacin
proporcionan una forma abreviada de realizardos operaciones, una de
ellas como asignacin; $a = $a + 6 se convierte en $a += 6;. De
manera similar, el operador de asignacin -= combina una resta con
una asignacin;este cdigo deja 1 en $a: stos son los operadores de
asignacin combinados de PHP. Algunos de los que aqu semuestran
podran no serle familiares an, pero pronto los analizaremos en este
captulo: += = *= /= .= %= &= |= ^= = 62. 48 PHP: Manual de
referenciaste es otro ejemplo, que usa el operador de concatenacin
de cadenas de PHP (.), de estaforma:Esto deja el texto Sin
preocupaciones. en $a. Incremento y disminucin de valoresOtra cosa
hecha con frecuencia en PHP, es incrementar (sumar 1) o disminuir
(restar 1) valores.Por ejemplo, podra utilizar cdigo como ste para
aumentar el valor en $a:De hecho, incluso podra usar el operador de
asignacin abreviado += de esta forma:Pero PHP tiene un operador ms
sencillo, especficamente para incrementar valores: ++,usado de esta
forma:Despus de la ejecucin de este cdigo, $a queda con un valor de
2. De forma similar, el opera-dor disminuye valores. Esto es clave
para entender los operadores ++ y --. Si utiliza ++ o -- despus de
unavariable como en $a++, el valor de la variable se incrementa
luego de ejecutarse el resto de lainstruccin. As que, por ejemplo,
esta lnea de cdigo calcula y muestra la raz cuadrada de 4,mostrando
un valor de 2 y, slo entonces, incrementa el valor de $a: 63.
Captulo 2: Operadores y control de flujo 49Por otra parte, este
cdigo, donde el operador ++ va primero, incrementa primero el
valoren $a y luego muestra la raz cuadrada de 5: Es importante
tener eso presente (si coloca ++ o -- enfrente de una variable, el
valor de estase incrementa o disminuye antes de que se ejecute el
resto de la instruccin; si coloca el opera-dor ++ o -- despus de la
variable, el valor de esa variable se incrementa o disminuye despus
deejecutarse el resto de la instruccin. sta es una pgina PHP de
ejemplo, que muestra cmo funcionan los incrementos en
PHP,phpincrement.php: Incremento y disminucin Incremento y
disminucin Puede ver esta pgina, phpincrement.php, en la Figura
2.3. 64. 50PHP: Manual de referencia FIGURA 2-3 Incremento y
disminucin con PHP Operadores de cadena de PHP Quizs haya escuchado
que PHP logra la excelencia al trabajar con cadenas de texto y es
verdad. As que tal vez se sorprenda al enterarse de que PHP slo
tiene dos operadores para funcionar con cadenas: el operador de
concatenacin, ., y el operador de asignacin de concatenacin
combinado, .=. El verdadero poder de encadenamiento PHP est en sus
funciones de cadena, que ver en el captulo 3. ste es un ejemplo del
uso de operadores de cadena, phpstringoperators.php: Operadores de
cadenaOperadores de cadena 65. Captulo 2:Operadores y control de
flujo 51 FIGURA 2-4 Operadores de cadena en PHP Puede ver
phpstringoperators.php en la Figura 2-4.Operadores orientados a
bits PHP brinda tambin un conjunto de operadores orientados a
trabajar con bits individuales de nmeros. En general, tiene poco
sentido utilizar estos operadores a menos que sepa lo que hace con
lujo de detalle. Si no sabe de los bits contenidos en bytes, no se
preocupe por ello. Aunque normalmente se usan para enteros y
similares, de hecho pueden usarse tambin con cadenas, en cuyo caso
trabajar con el cdigo ASCII numrico de cada carcter. NOTA Estos
operadores estn diseados para trabajar en los bits individuales
contenidos en sus operandos; si busca los operadores booleanos que
funcionan con valores TRUE/FALSE, esto lo veremos ms adelante en
este captulo.Por ejemplo, el operador Or, |, trabaja con dos
operandos como ste: $a | $b. En el resultado, los bits que se
inicializan (es decir, igual a 1, no a 0) en $a o $b se inicializan
en el resultado. As, por ejemplo, si $a es igual a 1 (que tiene el
bit 0 inicializado) y $b = 2 (con el primer bit iniciali- zado),
entonces $a | $b ser igual a 1 | 2; los bits 0 y 1 se inicializan
en el resultado, de modo que es igual a 3.Puede observar los
operadores orientados a bits en la Tabla 2-1. 66. 52 PHP: Manual de
referencia Operador OperacinEjemplo Resultado $a & $bAnd$a
& $b Se inicializan los bits en $a y $b. $a | $bOr $a | $b Se
inicializan los bits en $a o en $b. $a ^ $bXor$a ^ $b Se
inicializan los bits en $a o $b pero no en ambos. ~ $a Not~ $aLos
bits en $a no se inicializan y viceversa. $a $b Desplazar a la
derecha $a >> $bDesplaza los bits de $a $b pasos a la derecha
(cada paso significa dividir entre dos).TABLA 2-1 Operadores
orientados a bitsAqu podra observar tambin los operadores de
desplazamiento, >. stos le permi-ten desplazar los bits
contenidos en sus operandos a la izquierda (). Ustedindica el nmero
que desea desplazar y el nmero de espacios que desea se desplacen
los bitsde ese nmero. Por ejemplo, 8 > 2 desplaza los bits de
valor 8 dos espacios a laderecha, lo mismo que dividir entre 4, de
modo que 8 >> 2 = 2. Operador de ejecucinEl operador de
ejecucin de PHP es formidable (le permite ejecutar comandos del
sistema,como fecha o dir (de directorio) de Windows. Todo lo que
debe hacer para ejecutar un comandodel sistema es encerrarlo entre
comillas individuales inversas ( ` ). ste es un ejemplo. El cdigo
ejecutar el comando de Windows dir c:Inetpubwwwrootch02 y mostrar
los resultados (observe que la diagonal inversa es un carcter
sensible, demodo que debe cerrarlo como ):Esto es lo que se obtiene
al ejecutar este ejemplo, phpdir.php:%php phpdir.php El volumen de
la unidad K es AsicomDBaseII Directorio de
K:AsicomClientesMcGrawHillPHPTraducidosCaptulosCap
02Cdigoch0207/03/200809:39 p.m.
- .07/03/200809:39 p.m.
- ..03/03/200811:06 a.m.457 phpbreak.php 67. Captulo 2:
Operadores y control de flujo5303/03/2008 11:06 a.m.375
phpcontinue.php07/03/2008 09:39 p.m. 79 phpdir.php03/03/2008 11:06
a.m.554 phpdoornot.php03/03/2008 11:06 a.m.434
phpdowhile.php03/03/2008 11:06 a.m.406 phpelse.php03/03/2008 11:06
a.m.642 phpelseif.php03/03/2008 11:06 a.m.358
phpequality.php03/03/2008 11:06 a.m.384 phpfor.php03/03/2008 11:06
a.m.323 phpforeach.php03/03/2008 11:06 a.m.359 phpif.php07/03/2008
06:17 p.m.549 phpincrement.php03/03/2008 11:06 a.m.344
phpisfloat.php03/03/2008 11:06 a.m.347 phplogical.php07/03/2008
01:40 p.m.555 phpmathfunctions.php06/03/2008 07:43 p.m.475
phpmathoperators.php03/03/2008 11:06 a.m. 30
phpprecedence.php03/03/2008 11:06 a.m.267
phpsettingprecedence.php07/03/2008 06:32 p.m.454
phpstringoperators.php03/03/2008 11:06 a.m.1,150
phpstrings.php03/03/2008 11:06 a.m.897 phpswitch.php03/03/2008
11:06 a.m.405 phpwhile.php 22 archivos 9,844 bytes2 dirs
28,034,473,984 bytes libresAqu hay otro ejemplo; ste ejecuta el
comando date:ste es el tipo de resultado que podra ver con Unix,
utilizando el shell bash:-bash-2.05$b php phpdate.phpFri April 06
11:24:45 PDT 2007Como date es tambin un comando de DOS, esto es lo
que podra ver en una ventana DOS:C:php>php phpdate.phpLa fecha
actual es: 07/03/2008Escriba la nueva fecha: (dd-mm-aa)Precedencia
de operadores de PHPLa mayora de operadores adicionales de PHP que
ver en este libro son para uso en instruccio-nes if y ciclos, es
los que veremos a continuacin. Sin embargo, primero hay una cosa
que deciracerca de los operadores y es la precedencia (el orden en
que se ejecutan los operadores).Por ejemplo, observe esta
expresin:4 + 3 * 9Qu pasar aqu? Se har la suma 4 + 3 y el resultado
se multiplicar por 9 para producir63? O bien, el 3 se multiplicar
por 9 para dar 27 y a ese nmero se sumar 4 para producir 31?Resulta
que PHP procesa las multiplicaciones antes que las sumas; as que
aqu obtendr 31,como se puede verificar con este script,
phpprecedence.php: 68. 54PHP: Manual de referencia Cuando lo
ejecute obtendr %php phpprecedence.php 31 Cmo puede averiguar la
precedencia de diferentes operadores? Observe la Tabla 2-2,
mostrando la precedencia de diversos operadores, de un valor alto
en la cima de la tabla, a un valor bajo en la base de la misma.
Desea establecer la precedencia usted mismo? Puede indicar a PHP qu
operaciones eje- cutar primero, encerrndolas entre parntesis. ste
es un ejemplo, phpsettingprecedence.php: Establecer precedencia de
operadoresEstablecer precedencia de operadores TABLA 2-2
OperadorOperadores new [ ! ~ ++ - (int) (float) (string) (array)
(object) @ */ % +-. > < >= == != === !== & ^ |
&& || ?: = += -= *= /= .= %= &= |= ^= = print and xor
or , 69. Captulo 2: Operadores y control de flujo 55 FIGURA 2-5 Cmo
establecer la precedencia en PHP Puede ver esta pgina en un
navegador en la Figura 2-5. Como puede apreciar, el uso de
parntesis determina la precedencia de la ejecucin de los
operadores.Uso de la instruccin if ste es el punto donde usted
comienza a tomar decisiones en su cdigo y a ejecutar otro,
dependiendo de los resultados de esa decisin. sta es la instruccin
if, la instruccin principal para tomar decisiones en PHP. As es
como se ve formalmente: if(expresin) instruccin Aqu, una expresin
de PHP se evala de acuerdo con un valor TRUE o FALSE. Al igual que
otros lenguajes a los que haya tenido alcance, si la expresin es
TRUE (verdadera), se ejecuta la instruccin siguiente; si es FALSE
(falsa), la instruccin no se ejecuta. Se usan operadores con-
dicionales y lgicos, que veremos a continuacin, para crear
expresiones del tipo que pueden evaluar instrucciones if. Por
ejemplo, puede utilizar el operador mayor que, >, para formar
una expresin como 4 > 1, que es TRUE, ya que 4 es realmente
mayor que 1.Tambin cabe observar que aunque la instruccin pueda ser
una lnea de cdigo, tambin es posible utilizar una instruccin
compuesta de PHP, integrada por mltiples instrucciones indivi-
duales encerradas entre llaves { y }. sta es una instruccin
individual: echo "sta es la respuesta."; 70. 56 PHP: Manual de
referencia sta es una instruccin compuesta: { echo "sta"; echo "
es"; echo " la"; echo " respuesta."; }La instruccin if es
formidable porque le permite hacer elecciones al instante y
ejecutar cdigo alternativo, dependiendo de los resultados de esa
eleccin. Por ejemplo, podra verifi- car el valor de una contrasea
para asegurarse de que es correcta o comprobar la respuesta del
usuario a preguntas s/no (Desea papas fritas con su platillo?).Por
ejemplo, podra mostrar texto si la temperatura exterior es superior
a 18 grados cent- grados, lo que se podra hacer de esta forma:
Aunque esta forma de hacer las cosas, con una sola instruccin
despus de la instruccin if, funciona, es ms usual emplear los
llaves con instrucciones compuestas como sta: Como sta es la forma
en que generalmente ver que se hacen las cosas (incluso con ins-
trucciones individuales), as ver la instruccin if en este libro
(con las llaves). Desde luego, tam- bin puede usar instrucciones
compuestas aqu: ste ejemplo, phpif.php, comprueba cuntos minutos ha
estado alguien en la piscina (si son ms de 30, es tiempo de salir):
Uso de la instruccin if 71. Captulo 2: Operadores y control de
flujo 57 Uso de la instruccin ifSi es tiempo de salir de la
piscina, puede mostrar un mensaje:Uso de la instruccin if Uso de la
instruccin ifPuede ver phpif.php en accin en la Figura 2-6.FIGURA
2-6 Uso de la instruccin if en PHP 72. 58PHP: Manual de referencia
ste es otro ejemplo, phpisfloat.php. Como se dijo en el captulo
anterior, PHP incluye fun- ciones especiales que permiten
determinar el formato de almacenaje interno seleccionado por PHP
para las variables is_int, is_float, etctera. Este ejemplo
comprueba si una variable est almacenada como nmero de punto
flotante, luego le suma 4.5 y utiliza la funcin var_dump de PHP
para descargar (es decir, mostrar) el valor de la variable en el
navegador: Uso de la funcin is_float Uso de la funcin is_float
Puede ver phpisfloat.php en accin en la Figura 2-7. Como aparece
ah, la funcin vardump da aqu la respuesta float(15.2), indicando
valor y tipo interno de la variable.Hablaremos ms de la instruccin
if a continuacin. Por ejemplo, el operador mayor que (>), es tan
slo uno de entre un conjunto de operadores de comparacin de PHP,
que se anali- zarn a continuacin. FIGURA 2-7 Uso de la funcin
is_float en PHP 73. Captulo 2:Operadores y control de flujo
59Operadores de comparacin de PHPYa ha visto uno de los operadores
de comparacin de PHP, el operador mayor que:Existen muchos otros
operadores de comparacin, como menor que o igual a ( Puede ver
todos los operadores de comparacin de PHP en la Tabla 2-3. Por
ejemplo, para saber cmo usar el operador de igualdad == en
phpequality.php, quecomprueba si alguien ha estado en la piscina
exactamente 30 minutos:Uso del operador ==Operador
OperacinEjemploResultado== Igual$a == $b TRUE si $a es igual a
$b===Idntico $a === $bTRUE si $a es igual a $b y son del mismo
tipo!= No igual $a != $b TRUE si $a no es igual a $b No igual $a $b
TRUE si $a no es igual a $b!==No idntico$a !== $bTRUE si $a no es
igual a $b o no son del mismo tipoMayor que$a > $bTRUE si $a es
estrictamente mayor que $b= $b TRUE si $a es mayor que o igual a
$bTABLA 2-3 Operadores de comparacin 74. 60PHP: Manual de
referencia Uso del operador == Puede ver phpequality.php en la
Figura 2-8; asegrese de no confundir el operador de igualdad, ==, y
el operador de asignacin, =. De forma similar, en este ejemplo se
usa el operador no igual, !=, para probar si la tempera- tura no es
igual a 20 grados: Inicio de sesin con Ajax y PHP sta es otra tarea
para la que se usa Ajax a menudo y PHP tiene que ver tambin:
comprobar inicios de sesin. Por ejemplo, puede verificar el inicio
de sesin de un usuario discretamente o permitirle elegir su nombre
de usuario y contrasea. Este ejemplo, log.html, concede al usua-
rio la eleccin de su nombre y, si ya se encuentra ese nombre
registrado, log.html informa al usuario de ese hecho. Puede ver cmo
funciona esto en la Figura 13-10 la aplicacin com- prueba el nombre
de usuario ingresado por la persona, mientras sta lo teclea y si ya
no est disponible, como aqu, le informa del hecho.Este ejemplo lee
claves conforme el usuario las escribe, llamando a una funcin
JavaScript de nombre checker, comprobando el nuevo nombre de
usuario: Elija un nombre de usuario Escriba un nombre de usuario:
FIGURA 13-10 Comprobacin de un nombre de usuario 503. 496 PHP:
Manual de referenciaLa funcin checker llama a getData con la URL
log.php, enviando el nombre de usuario queste escribe en log.php,
mediante el uso del nombre de parmetro qu: function checker() { var
targetDiv = document.getElementById("targetDiv");
targetDiv.innerHTML = ""; if
(document.getElementById("textField").value) {
getData("log.php?qu=" +
document.getElementById("textField").value); } }La funcin getData
se conecta al servidor y descarga los resultados: function
getData(dataSource) { if(XMLHttpRequestObject) {
XMLHttpRequestObject.open("GET", dataSource);
XMLHttpRequestObject.onreadystatechange = function() { if
(XMLHttpRequestObject.readyState == 4 &&
XMLHttpRequestObject.status == 200) { . . . } }
XMLHttpRequestObject.send(null); } }En este caso, el script PHP
devolver OK si el nombre de usuario elegido es correcto ynotOK, si
ya est en uso. Si el nombre de usuario ya fue tomado, este ejemplo
mostrar elmensaje Lo sentimos, ese nombre de usuario no est
disponible. en un elemento
: function getData(dataSource) { if(XMLHttpRequestObject) { XMLHttpRequestObject.open("GET", dataSource); XMLHttpRequestObject.onreadystatechange = function() { if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) { if(XMLHttpRequestObject.responseText == "notOK"){ var targetDiv = document.getElementById("targetDiv"); targetDiv.innerHTML = "Lo sentimos, ese nombre de usuario no est disponible."; 504. Captulo 13: Ajax avanzado 497}}}XMLHttpRequestObject.send(null);}} El script PHP, log.php, comprueba el nombre de usuario que se enva usando el parmetro qu y devuelve el texto notOK, en caso de que el nombre de usuario ya est en uso: De lo contrario, devuelve OK: Y eso es todo lo que necesita.Obtencin de datos con solicitudes de encabezados y Ajax Puede usar tambin Ajax para comprobar archivos en el servidor antes de trabajar con ellos. Este ejemplo, head.html, lee los encabezados HTTP devueltos por el servidor para el archivo head. html mismo, haciendo una lista de ellos, como ver en la Figura 13-11.Como se aprecia en la figura, cuando enva una solicitud de encabezado para un archivo, recibe de vuelta informacin como sta, indicando servidor, ltima fecha de modificacin del archivo y longitud: Server: Microsoft-IIS/5.1 Date: Mon 28, May 2007 17:57:54 GMT Content-Type: text/ html Accept-Ranges: bytes Last-Modified: Mon, 28 May 2007 17:57:49 GMT ETag: "3c058b451a1c71:a2f" Content-Length: 1266Vale la pena observar cmo se trabaja con solicitudes de encabezados en Ajax, y este ejem- plo, head.html, presenta su funcionamiento. El ejemplo comienza con el botn de la figura, ligado a la funcin getData: Obtencin de informacin de encabezados 505. 498 PHP: Manual de referenciaEn la funcin getData, usted especifica que desea informacin de encabezados especifi-cando abrir el documento con el mtodo HEAD (no GET ni POST):function getData(dataSource, divID){if(XMLHttpRequestObject) {var targetDiv = document.getElementById(divID);XMLHttpRequestObject.open("HEAD", dataSource);...} Y cuando se descarguen sus datos, puede recuperar los datos de los encabezados con elmtodo getAllResponseHeaders del objeto XMLHttpRequest:function getData(dataSource, divID){if(XMLHttpRequestObject) {var targetDiv = document.getElementById(divID);XMLHttpRequestObject.open("HEAD", dataSource);XMLHttpRequestObject.onreadystatechange = function(){if (XMLHttpRequestObject.readyState == 4 &&XMLHttpRequestObject.status == 200) {targetDiv.innerHTML =XMLHttpRequestObject.getAllResponseHeaders();}}XMLHttpRequestObject.send(null);}} Este cdigo da los resultados en la Figura 13-11. Genial. Puede utilizar el mtodo getAllResponseHeaders para leer todos los encabezados delservidor, pero tambin emplear el mtodo getResponseHeader para leer el valor de cualquierencabezado en particular. Este ejemplo, lastModified.html, comprueba su ltima fecha de modi-ficacin y la muestra, como se ve en la Figura 13-12 Esto se pone en accin llamando el mtodo getResponseHeader, del objeto 506. Captulo 13: Ajax avanzado 499FIGURA 13-11 Obtencin de informacin acerca de encabezadosXMLHttpRequest de esta forma: getResponseHeader(Last-Modified). ste es el uso delmtodo pasa el nombre del encabezado de su inters. As es como lastModified.html poneesto a trabajar:Obtencin de la ltima fecha de modificacin de un documentoObtencin de la ltima fecha de modificacin de un documento 508. 14CAPTULO Trazo de imgenes en el servidorT odo este captulo trata sobre el uso de PHP para crear grficos en el servidor. Puede trazar casi cualquier cosa y devolverla al navegador en diferentes formatos grficos (JPEG, PNG, etc.) mediante PHP. Para hacer que funcione, debe instalar el soporte GD2 para PHP. Ya que se hace de diferen-tes maneras, compruebe las instrucciones de instalacin de PHP para su sistema operativo. Porejemplo, podra tener que comprobar la casilla de seleccin CD2, cuando el programa de insta-lacin pregunte qu opciones desea instalar. Pero qu funciones grficas estn disponibles? sta es la lista:FuncinDescripcingd_infoRecupera informacin acerca de la biblioteca GDgetimagesize Devuelve el tamao de una imagenimage_type_to_extensionDevuelve la extensin del archivo de la imagenimage_type_to_mime_typeDevuelve el Tipo Mime de imagen que detecta getimagesize, exif_read_data, exif_thumbnail, exif_imagetypeimage2wbmp Enva la imagen al navegador o archivoimagealphablending Establece la combinacin de una imagenimageantialias Establece si se usarn funciones antialias o noimagearc Traza un arcoimagecharTraza un carcter horizontalmenteimagecharupTraza un carcter verticalmenteimagecolorallocate Asigna color a una imagenimagecolorallocatealphaAsigna color a una imagen y la configuracin alfaimagecolorat Devuelve el ndice del color de un pxelimagecolorclosestDevuelve el ndice del color ms prximo al color dadoimagecolorclosestalpha Devuelve el ndice del color ms prximo al color dado y configuracin alfa 501 509. 502 PHP:Manual de referenciaFuncin Descripcinimagecolorclosestthwb Devuelve el ndice del color que tiene el matiz, cantidad de blanco y negro msprximos al color dadoimagecolordeallocateDesestima un colorimagecolorexact Devuelve el ndice del color dadoimagecolorexactalphaDevuelve el ndice del color dado y la configuracin alfaimagecolormatch Hace que los colores de la versin de la paleta de una imagen se aproximen msa la versin de color verdaderoimagecolorresolve Devuelve el ndice del color dado o su alternativa ms prxima posibleimagecolorresolvealphaDevuelve el ndice del color dado y configuracin alfa o su alternativa msprxima posibleimagecolorset Establece el color del ndice de paleta dadoimagecolorsforindex Devuelve los colores de un ndiceimagecolorstotalDevuelve el nmero de colores de la paleta de una imagenimagecolortransparent Establece transparente un colorimageconvolutionAplica una matriz de circunvolucin de 3 x 3imagecopy Copia slo parte de una imagenimagecopymergeCopia y combina parte de una imagenimagecopymergegrayCopia y combina parte de una imagen con escala de grisesimagecopyresampledCopia y cambia el tamao de parte de una imagen, usando muestreo repetidoimagecopyresizedCopia y cambia el tamao de parte de una imagenimagecreate Crea una nueva imagenimagecreatefromgd Crea una nueva imagen a partir de un archivo GD o URLimagecreatefromgd2Crea una nueva imagen a partir de un archivo GD2 o URLimagecreatefromgd2partCrea una nueva imagen a partir de una parte dada de un archivo GD2 o URLimagecreatefromgifCrea una nueva imagen a partir de un archivo GIFimagecreatefromjpeg Crea una nueva imagen a partir de un archivo JPEGimagecreatefrompngCrea una nueva imagen a partir de un archivo PNGimagecreatefromstring Crea una nueva imagen a partir del flujo de imgenesimagecreatefromwbmp Crea una nueva imagen a partir de un archivo WBMPimagecreatefromxbmCrea una nueva imagen a partir de un archivo XBMimagecreatefromxpmCrea una nueva imagen a partir de un archivo XPMimagecreatetruecolorCrea una nueva imagen de color verdaderoimagedashedline Traza una lnea punteadaimagedestroyDestruye una imagenimageellipseTraza una elipse 510. Captulo 14: Trazo de imgenes en el servidor 503FuncinDescripcinimagefillRelleno por inundacin de colorimagefilledarc Traza una elipse parcial y la rellenaimagedfilledellipseTraza una elipse rellenaimagefilledpolygon Traza un polgono rellenoimagefilledrectangle Traza un rectngulo rellenoimagefilltoborderRelleno por inundacin con un color especficoimagefilterAplica un filtro a una imagenimagefontheightDevuelve la altura de la fuenteimagefontwidthhDevuelve el ancho de la fuenteimageftbboxProporciona el cuadro limtrofe de textoimagefttextEscribe texto en la imagenimagegammacorrectAplica una correccin gammaimagegdEnva una imagen GD al navegador o archivoimagegd2 Enva una imagen GD2 al navegador o archivoimagegif Enva una imagen al navegador o archivoimageinterlace Habilita o deshabilita operaciones de entrelazadoimageistruecolor Determina si una imagen es de color verdaderoimagejpegEnva una imagen al navegador o archivoimagelayereffect Establece la bandera de combinacin alfa para utilizar efectos por capasimagelineTraza una lneaimageloadfontCarga una nueva fuenteimagepalettecopy Copia la paleta de una imagenimagepng Enva una imagen PNG al navegador o un archivoimagepolygon Traza un polgonoimagepsbboxEspecifica el cuadro de texto limtrofe usando fuentes PostScript Type1imagepsencodefontCambia la codificacin de caracteres de una fuenteimagepsextendfontExtiende o condensa una fuenteimagepsfreefontLibera la memoria usada actualmente por una fuente PostScript Type1imagepsloadfontInclina una fuenteimagepstextTraza texto mediante fuentes PostScript Type1imagerectangle Traza un rectnguloimagerotateGira una imagen a un ngulo dado 511. 504 PHP:Manual de referenciaFuncin DescripcinimagesavealphaEstablece la bandera para guardar informacin completa del canal alfa cuando seguardan imgenes PNGimagesetbrush Establece la imagen del pincel para el trazo de lneasimagesetpixel Establece un pxelimagesetstyle Establece el estilo para el trazo de lneasimagesetthickness Establece el grosor para el trazo de lneasimagesettileEstablece la imagen en mosaico para rellenoimagestring Traza una cadena horizontalmenteimagestringup Traza una cadena verticalmenteimagesx Devuelve el ancho de la imagenimagesy Devuelve el alto de la imagenimagetruecolortopalette Convierte una imagen de color verdadero en una de paleta de coloresimagettfbboxProporciona el cuadro limtrofe de un texto usando fuentes TrueTypeimagettftextEscribe texto en la imagen usando fuentes TrueTypeimagetypesDevuelve los tipos de imgenes admitidosimagewbmp Enva una imagen al navegador o archivoimagexbmEnva una imagen XBM al navegador o archivoiptcembed Incorpora datos IPTC binarios en una imagen JPEGiptcparse Analiza la estructura de un bloque IPTC binariojpeg2wbmp Convierte un archivo de imagen JPEG en WBMPpng2wbmpConvierte un archivo de imagen PNG en WBMPBueno, comencemos con la creacin de una imagen simple.Creacin de una imagenPara crear una imagen con la cual trabajar en la memoria, se comienza con la funcin image-create de GD2:imagecreate(x_size, y_size)Los parmetros x_size y y_size estn en pxeles.As se crea una primera imagen:$image_height = 100;$image_width = 300;$image = imagecreate($image_width, $image_height);... 512. Captulo 14: Trazo de imgenes en el servidor505 Despus, para establecer los colores a usarse en la imagen, se usa la funcin imagecolora-llocate:imagecolorallocate (image, red, green, blue) Debe pasar a esta funcin la imagen con que est trabajando, adems de los componentesrojo, verde y azul (red, green, blue) como valores de 0 a 255. Por ejemplo, si desea rojo slido,pasara a imagecolorallocate un valor rojo de 255, mientras verde y azul seran de 0. La primera vez que usted llama a imagecolorallocate, esta funcin establece el color defondo; las llamadas subsecuentes establecen diferentes colores para dibujar. As se establece elcolor de fondo en gris claro (rojo = 200, verde = 200, azul = 200):$image = imagecreate($image_width, $image_height);$back_color = imagecolorallocate($image, 200, 200, 200);...Para devolver una imagen JPEG al navegador, debe indicarle que est haciendo eso con lafuncin header, para establecer el tipo de imagen y luego enviarla con la funcin imagejpeg:$image_height = 100;$image_width = 300;$image = imagecreate($image_width, $image_height);$back_color = imagecolorallocate($image, 200, 200, 200);header(Content-Type: image/jpeg);imagejpeg($image);...stas son algunas funciones para crear imgenes para diversos formatos que puede usar: imagegif Enva una imagen GIF al navegador o un archivo imagejpeg Enva una imagen JPEG al navegador o un archivo imagewbmp Enva una imagen WBMP al navegador o un archivo imagepng Enva una imagen PNG al navegador o un archivo Despus de enviar la imagen, puede destruir el objeto de imagen con la funcin imagedes-troy; todo esto se muestra en phpimage.php:Puede ver los resultados en la Figura 14-1. Todo lo que aparece es un rectngulo en el fondode este ejemplo. Sin embargo, hemos logrado progresar (es una imagen real la que ve en lafigura).Por otra parte, es una pgina Web rara que muestra simplemente una imagen. En general,dicha imagen aparece en una pgina HTML.Presentacin de imgenes en pginas HTMLLa imagen creada en phpimage.php es JPEG estndar; as que no hay razn por la que nopueda incorporarla en una pgina Web. Cmo hara eso? Con un elemento estndar,desde luego. Por ejemplo, si tuviera una imagen JPEG en el servidor, image.jpg, podra mostrarlade esta forma en una pgina Web: De la misma forma, puede dar el nombre del script que genera una imagen JPEG, phpi-mage.php, como el atributo src de esta manera: 514. Captulo 14: Trazo de imgenes en el servidor507 FIGURA 14-2 Cmo mostrar la imagen de un rectngulo en una pgina WebAs se ve una pgina Web, phpimage.html, mostrando el rectngulo en blanco creado por phpimage.php: Incorporacin de imgenes creadas en pginas HTML Incorporacin de imgenes creadas en pginas HTML sta es una imagen en blanco que se crea en el servidor:
Puede ver los resultados en la Figura 14-2, donde aparece la imagen JPEG creada por php- image.php, incorporada en una pgina HTML. No est mal. Bueno, eso crea una imagen bsica y la muestra. Qu tal si trazamos algunos grficos reales?Trazo de lneas Puede trazar lneas con la funcin imageline: imageline(image, x1, y1, x2, y2, color) 515. 508 PHP: Manual de referenciaEsta funcin traza una lnea de (x1, y1) a (x2, y2) (el extremo superior izquierdo de laimagen es (0, 0) y todas las medidas estn en pxeles) en la imagen image, usando el color detrazo color.Es momento de trazar lneas en un nuevo script, phpline.php. Este ejemplo comienza con lacreacin del mismo fondo en la imagen ya vista:Ahora estableceremos el color de trazo para las lneas. En este caso usaremos negro, cuyosvalores son rojo, verde y azul en 0:Luego trace lneas con imageline: Y enve la imagen al navegador, para luego destruirla de esta forma: As luce la pgina Web, phpline.html, mostrando las lneas creadas por phpline.php: Trazo de lneasTrazo de lneasEstas lneas se trazaron en el servidor:
Puede ver los resultados en la Figura 14-3, las lneas creadas por phpline.php aparecen enuna pgina HTML. Genial.Puede ajustar los parmetros de lneas como stas; por ejemplo, trazar lneas ms gruesas yeso veremos a continuacin. 517. 510PHP: Manual de referenciaFIGURA 14-3 Cmo mostrar lneas en una pgina WebCmo establecer el grosor de la lneaPuede establecer el grosor del trazo cuando crea una imagen, mediante la funcin imagesetthi-ckness:imagesetthickness(image, thickness)Cuando llama a esta funcin y le pasa una imagen, establece ancho del trazo de esa imagen,en pxeles. Por ejemplo, puede definir el grosor de lneas en phpline.php a 6 pxeles (en lugar delvalor predeterminado de 1 pxel), de esta forma en phpthickline.php: 518. Captulo 14: Trazo de imgenes en el servidor 511 FIGURA 14-4 Cmo mostrar lneas gruesas en una pgina WebAs vera la pgina Web phpthickline.html, mostrando las lneas ms gruesas creadas en phpthickline.php: Trazo de lneas gruesas Trazo de lneas gruesas Estas lneas gruesas se trazaron en el servidor:
Y puede ver los resultados en la Figura 14-4, las lneas gruesas aparecen en una pgina HTML.Trazo de rectngulos Puede dibujar muchas figuras usando slo lneas, pero hay ms funciones de GD a considerar. Una de ellas, imagerectangle, traza rectngulos: imagerectangle(image, x1, y1, x2, y2, color) 519. 512PHP: Manual de referenciaEsta funcin crea un rectngulo de color color en la imagen image, a partir de la coordenadasuperior izquierda x1, y1, que termina en la coordenada inferior derecha x2, y2.Este ejemplo, phprectangle.php, traza varios rectngulos:Y as podra incorporar esos rectngulos en una pgina Web, phprectangle.html: Trazo de rectngulos Trazo de rectngulos Estos rectngulos se trazaron en el servidor:
En los resultados de la Figura 14-5, aparecen los rectngulos: 520. Captulo 14: Trazo de imgenes en el servidor513 FIGURA 14-5 Cmo mostrar rectngulos en una pgina WebTrazo de elipses Desea trazar circunferencias o elipses? Use la funcin imageellipse: imageellipse(image, cx, cy, w, h, color)As trabaja. Esta funcin traza una elipse con centro en cx, cy en la imagen representada por image. Los valores w y h especifican ancho y alto de la elipse, respectivamente. El color de la elipse lo define color. Esta funcin es bastante similar a imagerectangle, pero en lugar de espe- cificar las esquinas superior izquierda e inferior derecha, se define el centro de la elipse, adems de su ancho y alto.Este ejemplo, phpellipse.php, traza elipses: Y as se incorporan estas elipses en una pgina Web, phpellipse.html: Trazo de elipsesTrazo de elipsesEstas elipses se trazaron en el servidor:
En los resultados de la Figura 14-6, aparecen las elipses.Trazo de arcosQu tal si trazamos arcos? La funcin imagearc traza arcos, que incluyen circunferencias y elip-ses parciales, adems de circunferencias y elipses completas:imagearc(image, cx, cy, w, h, s, e, color) 522. Captulo 14: Trazo de imgenes en el servidor515Esta funcin sirve para trazar arcos con centro en cx, cy en la imagen representada porimage. Los valores w y h especifican ancho y alto de la elipse, respectivamente; mientras lospuntos inicial y final se especifican en grados, indicados por los argumentos s y e (aqu, 0 selocaliza en la posicin de las 3 en punto). El arco mismo se traza en el sentido del reloj.As se puede trazar una cara sonriente usando arcos: imagearc($image, 150, 50, 50, 50, 30, 150, $drawing_color); imagearc($image, 150, 50, 70, 70, 0, 360, $drawing_color); imagearc($image, 135, 45, 20, 20, 190, -10, $drawing_color); imagearc($image, 165, 45, 20, 20, 190, -10, $drawing_color); imagearc($image, 135, 42, 10, 10, -10, 190, $drawing_color); imagearc($image, 165, 42, 10, 10, -10, 190, $drawing_color); As como se ve en phparc.php: 523. 516 PHP:Manual de referenciaFIGURA 14-7 Cmo mostrar arcos en una pgina WebEn la pgina HTML phparc.html se muestran estos arcos: Trazo de arcosTrazo de arcosEstos arcos se trazaron en el servidor:
La cara sonriente aparece en la Figura 14-7. Muy bonito.Trazo de polgonosSi desea trazar sus propias figuras, puede entrelazarlas con lneas mltiples, pero hay una formams fcil; use la funcin imagepolygon para trazar un polgono con slo pasarle una matriz depuntos. As se utiliza esta funcin en general:imagepolygon(image, points, num_points, color) 524. Captulo 14: Trazo de imgenes en el servidor517 Esta funcin crea un polgono en una imagen. El parmetro points es una matriz conte-niendo los vrtices del polgono (points[0] = x0, points[1] = y0, points[2] = x1, points[3] = y1,etc.). El parmetro num_points aloja el nmero total de puntos en el polgono y color es el colorpara dibujar que desea usar. sta es una buena funcin para trazar figuras complejas (todo lo que debe hacer es propor-cionar los vrtices del polgono en una matriz, como una matriz llamada $points):$points = array(0 => 120, 1=> 60,2 => 130, 3=> 60,4 => 150, 5=> 80,6 => 170, 7=> 40,8 => 150, 9=> 40,10 => 110,11 => 20,12 => 110,13 => 90); As se ve esa matriz en phppolygon.php, usando imagepolygon: As se ve la pgina HTML phppolygon.html, mostrando este polgono: 525. 518 PHP:Manual de referenciaFIGURA 14-8 Cmo mostrar un polgono en una pgina WebTrazo de polgonosTrazo de polgonosEste polgono se traz en el servidor:
El polgono trazado en este ejemplo se aprecia en la Figura 14-8.Relleno de figurasAdems de simplemente dibujar el contorno de figuras, tambin puede rellenarlas con colorusando diversas funciones que trazan figuras rellenas, como stas: imagefilledarc Traza una elipse parcial y la rellena imagefilledellipse Traza una elipse rellena imagefilledpolygon Traza un polgono relleno imagefilledrectangle Traza un rectngulo rellenoPor ejemplo, d un vistazo a imagefilledrectangle:imagefilledrectangle(image, x1, y1, x2, y2, color) 526. Captulo 14: Trazo de imgenes en el servidor 519Esta funcin crea un rectngulo relleno del color color, en la imagen image, a partir de lacoordenada superior izquierda x1, y1 y terminando en la coordenada inferior derecha x2, y2.Este ejemplo pone a trabajar imagefilledrectangle, que modifica nuestro ejemplo anteriorphprectangle.php en phpfilledrectangle.php. La diferencia radica en que esta versin rellena surectngulo con color (rojo en este caso). As se ve el cdigo: sta es la pgina HTML, phpfilledrectangle.html, mostrando dichos rectngulos rellenos: Trazo de rectngulos rellenosTrazo de rectngulos rellenosEstos rectngulos rellenos se trazaron en el servidor:
Los rectngulos rellenos trazados para este ejemplo aparecen en la Figura 14-9. Aqu estnen blanco y negro, pero en la pantalla son rojos. Formidable. 527. 520 PHP: Manual de referenciaFIGURA 14-9 Cmo mostrar rectngulos rellenos en una pgina WebTrazo de pxeles individualesDesea mayor poder grfico? Puede establecer pxeles individuales usando imagesetpixel:imagesetpixel(image, x, y, color) Como sera de esperar, esta funcin traza un pxel en x, y en la imagen image, de color color. Este ejemplo, phppixel.php, traza una lnea punteada usando imagesetpixel. Para delinearla,el ejemplo simplemente usa un ciclo for:for($loop_index = 50; $loop_index < 270; $loop_index += 3){ imagesetpixel($image, $loop_index, $loop_index / 3, $drawing_color);} As se ve este ciclo for en phppixel.php: Y sta es la pgina HTML, phppixel.html, mostrando estos pxeles: Trazo de pxelesTrazo de pxelesEstos pxeles se trazaron en el servidor:
Los pxeles que traza este ejemplo se muestran en la Figura 14-10.FIGURA 14-10 Cmo mostrar pxeles en una pgina Web 529. 522PHP: Manual de referenciaTrazo de textoQu tal si ahora trazamos texto? Existen varias funciones para trazar texto, como imagestring:imagestring(image, font, x, y, s, color)Esta funcin traza la cadena s especificada por la imagen image, con la esquina superiorizquierda en las coordenadas x, y en el color color. El paquete grfico incluye fuentes integradas(si font es 1, 2, 3, 4 o 5, se usa una fuente integrada). Tambin puede registrar sus propias fuentescon el paquete GD2, mediante la funcin imageloadfont. Observe que como trabajamos congrficos, el texto se traza como imagen, no como texto editable, mismo que aparecera en uncampo de texto.Suponga que quiere mostrar un texto centrado en una imagen, en el ejemplo phptext.php.Usara el nmero de fuente 4, mostrando el texto Sin problemas.: Cmo ajustar el tamao de la imagen para centrar este texto? Puede hacer la imagen dosveces ms ancha que el texto, con la funcin imagefontwidth, para determinar el ancho de cadacarcter de su fuente y multiplicando por 2 * strlen($text), para obtener el ancho que debe tenerla imagen:Asimismo, hacer la imagen tres veces ms alta que el texto con la funcin imagefon-theight): Despus, crear la imagen, as como colores de fondo y trazo:Luego, determinar las posiciones x y y en que iniciar el texto de modo que aparezca cen-trado en la imagen:Tras ello, trazar el texto, de la siguiente forma en phptext.php:Y sta es la pgina HTML, phptext.html, mostrando el texto nuevo: Trazo de textoTrazo de textoEste texto se traz en el servidor: 532. Captulo 14: Trazo de imgenes en el servidor 525 FIGURA 14-11 Cmo mostrar texto centrado en una pgina Web
El texto centrado, que se traz en este ejemplo, aparece en la Figura 14-11.Trazo de texto vertical Puede trazar texto con imagestring horizontalmente, de cualquier forma). Qu le parece si tra- zamos texto verticalmente, como cuando desea rotular el eje y de una grfica? Puede usar la funcin imagestringup: imagestringup(image, font, x, y, s, color) Esta funcin traza la cadena s verticalmente en la imagen especificada por image, en las coordenadas x, y en el color color. Si font es 1, 2, 3, 4 o 5, se usa una fuente integrada. Tambin puede registrar sus propias fuentes con el paquete GD2 mediante la funcin imageloadfont. Este ejemplo, phpverticaltext.php, traza texto vertical. Comienza seleccionando un nmero de fuente y determinando el texto que se mostrar: 533. 526PHP: Manual de referenciaLuego debe determinar las dimensiones de la imagen en que mostrar el texto. Por ejemplo,hacer que el ancho de la imagen sea tres veces mayor que el alto de la fuente seleccionada y queel alto de la imagen sea dos veces mayor respecto al ancho del texto a mostrar, adems de selec-cionar un color de dibujo rojo: Eso crea la imagen y elige el color de dibujo. Puede crear la imagen con un poco de aritm-tica y trazar el texto usando la funcin imagestringup de esta forma: 534. Captulo 14: Trazo de imgenes en el servidor 527 Y enviar la nueva imagen al navegador como en phpverticaltext.php:Eso completa phpverticaltext.php; sta es la pgina HTML, phpverticaltext.html, presen-tando texto: Trazo de texto verticalTrazo de texto verticalEste texto se traz en el servidor:
El texto vertical trazado en este ejemplo aparece en la Figura 14-12. Genial. 535. 528 PHP:Manual de referenciaFIGURA 14-12 Cmo mostrar texto vertical en una pgina WebTrabajo con archivos de imgenesPuede crear objetos grficos de imgenes a partir de archivos de imgenes usando estas funciones: imagecreatefromgif Crea una nueva imagen a partir de un archivo GIF o una URL imagecreatefromjpeg Crea una nueva imagen a partir de un archivo JPEG o una URL imagecreatefrompng Crea una nueva imagen a partir de un archivo PNG o una URL imagecreatefromwbmp Crea una nueva imagen a partir de un archivo WBMP o una URL imagecreatefromxbm Crea una nueva imagen a partir de un archivo XBM o una URL imagecreatefromxpm Crea una nueva imagen a partir de un archivo XPM o una URLEs sensacional cuando desea incorporar imgenes en pginas Web, pero tambin deseaagregarles algo de su cosecha, como un aviso de derechos de autor. Puede agregar una imagende su creacin, o un logotipo, dentro de otra imagen. Como ejemplo, usaremos la funcin ima-gecreatefromjpeg, cargando una imagen JPEG existente, image.jpg, a la que se aadir una carasonriente y un borde de imagen. As se usa esta funcin:imagecreatefromjpeg (string filename)sta devuelve un identificador de imagen representando la obtenida del nombre de archivodado, que devuelve una cadena vaca si falla.Vamos a modificar la imagen JPEG en la Figura 14-3, image.jpg, agregando la cara sonrienteque cre antes en el captulo, adems de un borde alrededor de la imagen completa. 536. Captulo 14: Trazo de imgenes en el servidor529FIGURA 14-13 Imagen JPEG que se modificar El archivo PHP, phpjpg.php, comienza como sera de esperar, creando una imagen en lamemoria a partir del archivo image.jpg:Eso carga la imagen, image.jpg, en el objeto $image (en la prctica, no olvide agregar cdigode manejo de errores, en caso de que PHP no encuentre su archivo de imagen). Puede trazar unborde dentro de esta imagen (pero sera de ayuda si conociera sus dimensiones).Puede hallarlas con las funciones imagesx e imagesy, que devuelven el tamao x y y de unaimagen. Y usar la funcin imagerectangle para crear el borde; as se traza ese borde, 10 pxelesdentro de la imagen: Y se agrega la cara sonriente a la imagen, tambin de esta forma en phpjpg.php:sta es la pgina HTML, phpjpg.html, mostrando la imagen modificada: Uso de imgenesUso de imgenesEsta imagen se modific en el servidor:
Y el resultado se ve en la Figura 14-14, se modific la imagen JPEG original, como ustedquera. 538. Captulo 14: Trazo de imgenes en el servidor531 FIGURA 14-14 Cmo mostrar una imagen modificada en una pgina WebColocacin de imgenes en mosaico Tambin puede usar una imagen para colocarla en mosaico en otra imagen, apareciendo repeti- damente en el fondo, con la funcin imagesettile. As se usa esta funcin: imagesettile(image, tile)As se establece la imagen de mosaico que usarn todas las funciones para relleno de regiones (como imagefilledrectangle e imagefilledpolygon) cuando rellena con el color especial IMG_COLOR_TILED.Qu tal un ejemplo? Este script, phptile.php, comienza creando una imagen a colocarse en mosaico. Usaremos imagecreatetruecolor para dar a la imagen creada toda la gama de colo- res posibles, en vez de imagecreate, que podra restringir inadvertidamente el nmero de colores disponibles en los mosaicos (cuando tenga dudas respecto a la restriccin de colores, debe usar imagecreatetruecolor en lugar de la funcin ms simple imagecreate): 539. 532PHP: Manual de referenciaAhora crearemos el mosaico, $tile, dentro de la imagen almacenada en $image. En estecaso, colocaremos en mosaico la imagen de la cara sonriente, leyendo primero image.jpg conimagecreatefromjpeg:Puede agregar la cara sonriente a este mosaico con imagearc:Eso completa la creacin de la imagen en mosaico, luego se establecera $tile como mosaicopara $image con imagesettile: Ahora puede trazar un rectngulo relleno, que usar este mosaico si establece el estilo derelleno a IMG_COLOR_TILED: Todo lo que resta por hacer es mostrar la imagen y luego destruirla en phptile.php:Y sta es la pgina HTML, phptile.html, que muestra la imagen en mosaico: Colocacin de imgenes en mosaicoColocacin de imgenes en mosaicoEsta imagen se coloc en mosaico en el servidor:
Y puede ver el resultado en la Figura 14-15, donde aparece la imagen en mosaico.FIGURA 14-15 Cmo mostrar una imagen en mosaico en una pgina Web 542. Captulo 14: Trazo de imgenes en el servidor 535Copia de imgenesDisponemos de ms poder para manipular grficos; por ejemplo, la funcin imagecopy le per-mite copiar toda, o parte de, una imagen:imagecopy (dest_image, src_image, dest_x, dest_y, src_x, src_y, src_w, src_h)Esta funcin copia una parte de src_image en dest_image comenzando en las coordenadas x,y src_x, src_y con un ancho de src_w y un alto de src_h. La porcin definida se copiar en lascoordenadas x, y, dest_x y dest_y. Copiar imgenes le permite realizar toda clase de trucos (por ejemplo, ste es un script,phpflip.php, que voltea una imagen horizontalmente). Comienza leyendo image.jpg, agre-gndole una cara sonriente y luego creando una imagen en blanco, $image_new, del mismotamao:Es aqu donde puede voltear la imagen, lo cual hace el cdigo encimando la imagen originaly voltendola, pxel por pxel, en la imagen volteada: for ($col = 0 ; $col < $image_width ; $col++) { for ($row = 0 ; $row < $image_height ; $row++) { imagecopy($image_new, $image_original, $image_width - $col - 1, $row, $col, $row, 1, 1); } } 543. 536 PHP:Manual de referenciasta es la pgina HTML, phpflip.html, que muestra la imagen volteada: Voltear imgenesVoltear imgenesEsta imagen se volte en el servidor:
- ..03/03/200811:06 a.m.457 phpbreak.php 67. Captulo 2:
Operadores y control de flujo5303/03/2008 11:06 a.m.375
phpcontinue.php07/03/2008 09:39 p.m. 79 phpdir.php03/03/2008 11:06
a.m.554 phpdoornot.php03/03/2008 11:06 a.m.434
phpdowhile.php03/03/2008 11:06 a.m.406 phpelse.php03/03/2008 11:06
a.m.642 phpelseif.php03/03/2008 11:06 a.m.358
phpequality.php03/03/2008 11:06 a.m.384 phpfor.php03/03/2008 11:06
a.m.323 phpforeach.php03/03/2008 11:06 a.m.359 phpif.php07/03/2008
06:17 p.m.549 phpincrement.php03/03/2008 11:06 a.m.344
phpisfloat.php03/03/2008 11:06 a.m.347 phplogical.php07/03/2008
01:40 p.m.555 phpmathfunctions.php06/03/2008 07:43 p.m.475
phpmathoperators.php03/03/2008 11:06 a.m. 30
phpprecedence.php03/03/2008 11:06 a.m.267
phpsettingprecedence.php07/03/2008 06:32 p.m.454
phpstringoperators.php03/03/2008 11:06 a.m.1,150
phpstrings.php03/03/2008 11:06 a.m.897 phpswitch.php03/03/2008
11:06 a.m.405 phpwhile.php 22 archivos 9,844 bytes2 dirs
28,034,473,984 bytes libresAqu hay otro ejemplo; ste ejecuta el
comando date:ste es el tipo de resultado que podra ver con Unix,
utilizando el shell bash:-bash-2.05$b php phpdate.phpFri April 06
11:24:45 PDT 2007Como date es tambin un comando de DOS, esto es lo
que podra ver en una ventana DOS:C:php>php phpdate.phpLa fecha
actual es: 07/03/2008Escriba la nueva fecha: (dd-mm-aa)Precedencia
de operadores de PHPLa mayora de operadores adicionales de PHP que
ver en este libro son para uso en instruccio-nes if y ciclos, es
los que veremos a continuacin. Sin embargo, primero hay una cosa
que deciracerca de los operadores y es la precedencia (el orden en
que se ejecutan los operadores).Por ejemplo, observe esta
expresin:4 + 3 * 9Qu pasar aqu? Se har la suma 4 + 3 y el resultado
se multiplicar por 9 para producir63? O bien, el 3 se multiplicar
por 9 para dar 27 y a ese nmero se sumar 4 para producir 31?Resulta
que PHP procesa las multiplicaciones antes que las sumas; as que
aqu obtendr 31,como se puede verificar con este script,
phpprecedence.php: 68. 54PHP: Manual de referencia Cuando lo
ejecute obtendr %php phpprecedence.php 31 Cmo puede averiguar la
precedencia de diferentes operadores? Observe la Tabla 2-2,
mostrando la precedencia de diversos operadores, de un valor alto
en la cima de la tabla, a un valor bajo en la base de la misma.
Desea establecer la precedencia usted mismo? Puede indicar a PHP qu
operaciones eje- cutar primero, encerrndolas entre parntesis. ste
es un ejemplo, phpsettingprecedence.php: Establecer precedencia de
operadoresEstablecer precedencia de operadores TABLA 2-2
OperadorOperadores new [ ! ~ ++ - (int) (float) (string) (array)
(object) @ */ % +-. > < >= == != === !== & ^ |
&& || ?: = += -= *= /= .= %= &= |= ^= = print and xor
or , 69. Captulo 2: Operadores y control de flujo 55 FIGURA 2-5 Cmo
establecer la precedencia en PHP Puede ver esta pgina en un
navegador en la Figura 2-5. Como puede apreciar, el uso de
parntesis determina la precedencia de la ejecucin de los
operadores.Uso de la instruccin if ste es el punto donde usted
comienza a tomar decisiones en su cdigo y a ejecutar otro,
dependiendo de los resultados de esa decisin. sta es la instruccin
if, la instruccin principal para tomar decisiones en PHP. As es
como se ve formalmente: if(expresin) instruccin Aqu, una expresin
de PHP se evala de acuerdo con un valor TRUE o FALSE. Al igual que
otros lenguajes a los que haya tenido alcance, si la expresin es
TRUE (verdadera), se ejecuta la instruccin siguiente; si es FALSE
(falsa), la instruccin no se ejecuta. Se usan operadores con-
dicionales y lgicos, que veremos a continuacin, para crear
expresiones del tipo que pueden evaluar instrucciones if. Por
ejemplo, puede utilizar el operador mayor que, >, para formar
una expresin como 4 > 1, que es TRUE, ya que 4 es realmente
mayor que 1.Tambin cabe observar que aunque la instruccin pueda ser
una lnea de cdigo, tambin es posible utilizar una instruccin
compuesta de PHP, integrada por mltiples instrucciones indivi-
duales encerradas entre llaves { y }. sta es una instruccin
individual: echo "sta es la respuesta."; 70. 56 PHP: Manual de
referencia sta es una instruccin compuesta: { echo "sta"; echo "
es"; echo " la"; echo " respuesta."; }La instruccin if es
formidable porque le permite hacer elecciones al instante y
ejecutar cdigo alternativo, dependiendo de los resultados de esa
eleccin. Por ejemplo, podra verifi- car el valor de una contrasea
para asegurarse de que es correcta o comprobar la respuesta del
usuario a preguntas s/no (Desea papas fritas con su platillo?).Por
ejemplo, podra mostrar texto si la temperatura exterior es superior
a 18 grados cent- grados, lo que se podra hacer de esta forma:
Aunque esta forma de hacer las cosas, con una sola instruccin
despus de la instruccin if, funciona, es ms usual emplear los
llaves con instrucciones compuestas como sta: Como sta es la forma
en que generalmente ver que se hacen las cosas (incluso con ins-
trucciones individuales), as ver la instruccin if en este libro
(con las llaves). Desde luego, tam- bin puede usar instrucciones
compuestas aqu: ste ejemplo, phpif.php, comprueba cuntos minutos ha
estado alguien en la piscina (si son ms de 30, es tiempo de salir):
Uso de la instruccin if 71. Captulo 2: Operadores y control de
flujo 57 Uso de la instruccin ifSi es tiempo de salir de la
piscina, puede mostrar un mensaje:Uso de la instruccin if Uso de la
instruccin ifPuede ver phpif.php en accin en la Figura 2-6.FIGURA
2-6 Uso de la instruccin if en PHP 72. 58PHP: Manual de referencia
ste es otro ejemplo, phpisfloat.php. Como se dijo en el captulo
anterior, PHP incluye fun- ciones especiales que permiten
determinar el formato de almacenaje interno seleccionado por PHP
para las variables is_int, is_float, etctera. Este ejemplo
comprueba si una variable est almacenada como nmero de punto
flotante, luego le suma 4.5 y utiliza la funcin var_dump de PHP
para descargar (es decir, mostrar) el valor de la variable en el
navegador: Uso de la funcin is_float Uso de la funcin is_float
Puede ver phpisfloat.php en accin en la Figura 2-7. Como aparece
ah, la funcin vardump da aqu la respuesta float(15.2), indicando
valor y tipo interno de la variable.Hablaremos ms de la instruccin
if a continuacin. Por ejemplo, el operador mayor que (>), es tan
slo uno de entre un conjunto de operadores de comparacin de PHP,
que se anali- zarn a continuacin. FIGURA 2-7 Uso de la funcin
is_float en PHP 73. Captulo 2:Operadores y control de flujo
59Operadores de comparacin de PHPYa ha visto uno de los operadores
de comparacin de PHP, el operador mayor que:Existen muchos otros
operadores de comparacin, como menor que o igual a ( Puede ver
todos los operadores de comparacin de PHP en la Tabla 2-3. Por
ejemplo, para saber cmo usar el operador de igualdad == en
phpequality.php, quecomprueba si alguien ha estado en la piscina
exactamente 30 minutos:Uso del operador ==Operador
OperacinEjemploResultado== Igual$a == $b TRUE si $a es igual a
$b===Idntico $a === $bTRUE si $a es igual a $b y son del mismo
tipo!= No igual $a != $b TRUE si $a no es igual a $b No igual $a $b
TRUE si $a no es igual a $b!==No idntico$a !== $bTRUE si $a no es
igual a $b o no son del mismo tipoMayor que$a > $bTRUE si $a es
estrictamente mayor que $b= $b TRUE si $a es mayor que o igual a
$bTABLA 2-3 Operadores de comparacin 74. 60PHP: Manual de
referencia Uso del operador == Puede ver phpequality.php en la
Figura 2-8; asegrese de no confundir el operador de igualdad, ==, y
el operador de asignacin, =. De forma similar, en este ejemplo se
usa el operador no igual, !=, para probar si la tempera- tura no es
igual a 20 grados: Inicio de sesin con Ajax y PHP sta es otra tarea
para la que se usa Ajax a menudo y PHP tiene que ver tambin:
comprobar inicios de sesin. Por ejemplo, puede verificar el inicio
de sesin de un usuario discretamente o permitirle elegir su nombre
de usuario y contrasea. Este ejemplo, log.html, concede al usua-
rio la eleccin de su nombre y, si ya se encuentra ese nombre
registrado, log.html informa al usuario de ese hecho. Puede ver cmo
funciona esto en la Figura 13-10 la aplicacin com- prueba el nombre
de usuario ingresado por la persona, mientras sta lo teclea y si ya
no est disponible, como aqu, le informa del hecho.Este ejemplo lee
claves conforme el usuario las escribe, llamando a una funcin
JavaScript de nombre checker, comprobando el nuevo nombre de
usuario: Elija un nombre de usuario Escriba un nombre de usuario:
FIGURA 13-10 Comprobacin de un nombre de usuario 503. 496 PHP:
Manual de referenciaLa funcin checker llama a getData con la URL
log.php, enviando el nombre de usuario queste escribe en log.php,
mediante el uso del nombre de parmetro qu: function checker() { var
targetDiv = document.getElementById("targetDiv");
targetDiv.innerHTML = ""; if
(document.getElementById("textField").value) {
getData("log.php?qu=" +
document.getElementById("textField").value); } }La funcin getData
se conecta al servidor y descarga los resultados: function
getData(dataSource) { if(XMLHttpRequestObject) {
XMLHttpRequestObject.open("GET", dataSource);
XMLHttpRequestObject.onreadystatechange = function() { if
(XMLHttpRequestObject.readyState == 4 &&
XMLHttpRequestObject.status == 200) { . . . } }
XMLHttpRequestObject.send(null); } }En este caso, el script PHP
devolver OK si el nombre de usuario elegido es correcto ynotOK, si
ya est en uso. Si el nombre de usuario ya fue tomado, este ejemplo
mostrar elmensaje Lo sentimos, ese nombre de usuario no est
disponible. en un elemento