Escolar Documentos
Profissional Documentos
Cultura Documentos
Historia de PHP
PHP/FI
PHP es el heredero de un producto anterior, llamado PHP/FI. PHP/FI fue creado por Rasmus Lerdorf en
1995, inicialmente como un simple conjunto de scripts de Perl para controlar los accesos a su trabajo
online. Llam a ese conjunto de scripts 'Personal Home Page Tools'. Segn se requera ms
funcionalidad, Rasmus fue escribiendo una implementacin C mucho mayor, que era capaz de
comunicarse con bases de datos, y permita a los usuarios desarrollar sencillas aplicaciones Web
dinmicas. Rasmus eligi liberar el cdigo fuente de PHP/FI para que cualquiera pudiese utilizarlo, as
como arreglar errores y mejorar el cdigo.
PHP/FI, que se mantuvo para pginas personales y como intrprete de formularios, inclua algunas de
las funcionalidades bsicas de PHP tal y como lo conocemos hoy. Tena variables como las de Perl,
interpretacin automtica de variables de formulario y sintaxis embebida HTML. La sintaxis por s
misma era similar a la de Perl, aunque mucho ms limitada, simple y algo inconsistente.
Por 1997, PHP/FI 2.0, la segunda escritura de la implementacin en C, tuvo un seguimiento estimado
de varios miles de usuarios en todo el mundo, con aproximadamente 50.000 dominios informando que
lo tenan instalado, sumando alrededor del 1% de los dominios de Internet. Mientras haba mucha
gente contribuyendo con bits de cdigo a este proyecto, era todava en su mayor parte el proyecto de
una sola persona.
PHP/FI 2.0 no se liber oficialmente hasta Noviembre de 1997, despus de gastar la mayora de su
vida en desarrollos beta. Fue sucedido en breve tiempo por las primeras versiones alfa de PHP 3.0.
PHP 3
PHP 3.0 era la primera versin que se pareca fielmente al PHP tal y como lo conocemos hoy en da.
Fue creado por Andi Gutmans y Zeev Zuraski en 1997 reescribindolo completamente, despus de que
encontraran que PHP/FI 2.0 tena pocas posibilidades para desarrollar una aplicacin comercial que
estaban desarrollando para un projecto universitario. En un esfuerzo para cooperar y empezar a
construir sobre la base de usuarios de PHP/FI existente, Andi, Rasmus y Zeev decidieron cooperar y
anunciar PHP 3.0 como el sucesor oficial de PHP/FI 2.0, interrumpindose en su mayor parte el
desarrollo de PHP/FI 2.0.
Una de las mejores caractersticas de PHP 3.0 era su gran extensibilidad. Adems de proveer a los
usuarios finales de una slida infraestructura para muchsimas bases de datos, protocolos y APIs, las
caractersticas de extensibilidad de PHP 3.0 atrajeron a docenas de desarrolladores a unirse y enviar
nuevos mdulos de extensin. Sin duda, sta fue la clave del enorme xito de PHP 3.0. Otras
caractersticas clave introducidas en PHP 3.0 fueron el soporte de sintxis orientado a objetos y una
sintxis de lenguaje mucho ms potente y consistente.
Todo el nuevo lenguaje fue liberado bajo un nuevo nombre, que borraba la implicacin de uso personal
limitado que tena el nombre PHP/FI 2.0. Se llam 'PHP' a secas, con el significado de ser un acrnimo
recursivo - PHP: Hypertext Preprocessor.
A finales de 1998, PHP creci hasta una base de instalacin de decenas de millares de usuarios
(estimados) y cientos de miles de sitios Web informando de su instalacin. En su apogeo, PHP 3.0
estaba instalado en aproximadamente un 10% de los servidores Web en Internet.
PHP 3.0 se liber oficialmente en Junio de 1998, despus de haber gastado unos 9 meses en pruebas
pblicas.
1
PHP 4
En el invierno de 1998, poco despus del lanzamiento oficial de PHP 3.0, Andi Gutmans y Zeev Suraski
comenzaron a trabajar en la reescritura del ncleo de PHP. Los objetivos de diseo fueron mejorar la
ejecucin de aplicaciones complejas, y mejorar la modularidad del cdigo base de PHP. Estas
aplicaciones se hicieron posibles por las nuevas caractersticas de PHP 3.0 y el apoyo de una gran
variedad de bases de datos y APIs de terceros, pero PHP 3.0 no fue diseado para el mantenimiento
tan complejo de aplicaciones eficientemente.
El nuevo motor, apodado 'Motor Zend' (comprimido de sus apellidos, Zeev y Andi), alcanz estos
objetivos de diseo satisfactoriamente, y se introdujo por primera vez a mediados de 1999. PHP 4.0,
basado en este motor, y acoplado con un gran rango de nuevas caractersticas adicionales, fue
oficialmente liberado en Mayo de 2000, casi dos aos despus que su predecesor, PHP 3.0. Adems de
la mejora de ejecucin de esta versin, PHP 4.0 inclua otras caractersticas clave como el soporte para
la mayora de los servidores Web, sesiones HTTP, buffers de salida, formas ms seguras de controlar
las entradas de usuario y muchas nuevas construcciones de lenguaje.
PHP 4 es actualmente la ltima versin liberada de PHP. Ya se est trabajando en modificar y mejorar
el motor Zend para integrar las caractersticas que se disearan para PHP 5.0.
Hoy, se estima que PHP es usado por cientos de miles de programadores y muchos millones de sitios
informan que lo tienen instalado, sumando ms del 20% de los dominios en Internet.
PHP 5
El 13 de julio de 2004, fue lanzado PHP 5, utilizando el motor Zend Engine 2.0 (o Zend Engine 2). La
versin ms reciente de PHP es la 5.3.6 (17 de marzo de 2011), que incluye todas las ventajas que
provee el nuevo Zend Engine 2. Tales como:
Mejor soporte para la programacin orientada a objetos, que en versiones anteriores era
extremadamente rudimentario.
Mejoras de rendimiento.
Mejor soporte para MySQL con extensin completamente reescrita.
Mejor soporte a XML (XPath, DOM, etc.).
Soporte nativo para SQLite.
Soporte integrado para SOAP.
Iteradores de datos.
Manejo de excepciones.
Mejoras con la implementacin con Oracle.
Qu es PHP?
Una respuesta corta y concisa, pero, qu significa realmente? Un ejemplo nos aclarar
las cosas:
2
Example #1 Un ejemplo introductorio
<html>
<head>
<title>Ejemplo</title>
</head>
<body>
<?php
echo "Hola, Soy un script PHP!";
?>
</body>
</html>
PHP puede hacer cualquier cosa que se pueda hacer con un script CGI, como procesar la
informacin de formularios, generar pginas con contenidos dinmicos, o enviar y
recibir cookies. Y esto no es todo, se puede hacer mucho ms.
3
El resultado del programa PHP se puede obtener a travs del navegador, conectndose
con el servidor web.
PHP puede ser utilizado en cualquiera de los principales sistemas operativos del
mercado, incluyendo Linux, muchas variantes Unix (incluyendo HP-UX, Solaris y
OpenBSD), Microsoft Windows, Mac OS X, RISC OS y probablemente alguno ms. PHP
soporta la mayora de servidores web de hoy en da, incluyendo Apache, Microsoft
Internet Information Server, Personal Web Server, Netscape e iPlanet, Oreilly Website
Pro server, Caudium, Xitami, OmniHTTPd y muchos otros. PHP tiene mdulos
disponibles para la mayora de los servidores, para aquellos otros que soporten el
estndar CGI, PHP puede usarse como procesador CGI.
De modo que, con PHP tiene la libertad de elegir el sistema operativo y el servidor de su
gusto. Tambin tiene la posibilidad de usar programacin procedimental o programacin
orientada a objetos. Aunque no todas las caractersticas estndar de la programacin
orientada a objetos estn implementadas en la versin actual de PHP, muchas
bibliotecas y aplicaciones grandes (incluyendo la biblioteca PEAR) estn escritas
ntegramente usando programacin orientada a objetos.
Con PHP no se encuentra limitado a resultados en HTML. Entre las habilidades de PHP se
incluyen: creacin de imgenes, archivos PDF y pelculas Flash (usando libswf y Ming)
sobre la marcha. Tambi puede presentar otros resultados, como XHTM y archivos XML.
PHP puede autogenerar stos archivos y almacenarlos en el sistema de archivos en vez
de presentarlos en la pantalla.
Adabas D dBase
Empress FilePro (read-only)
Hyperwave IBM DB2
Informix Ingres
InterBase FrontBase
4
mSQL Direct MS-SQL
MySQL ODBC
Oracle (OCI7 and OCI8) Ovrimos
PostgreSQL Solid
Sybase Velocis
Unix dbm Otras
Tambin cuenta con una extensin DBX de abstraccin de base de datos que permite
usar de forma transparente cualquier base de datos soportada por la extensin.
Adicionalmente, PHP soporta ODBC (el Estndar Abierto de Conexin con Bases de
Datos), asi que puede conectarse a cualquier base de datos que soporte tal estndar.
PHP tambin cuenta con soporte para comunicarse con otros servicios usando
protocolos tales como LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (en Windows) y
muchos otros. Tambin se pueden crear sockets puros. PHP soporta WDDX para el
intercambio de datos entre lenguajes de programacin en web. Y hablando de
interconexin, PHP puede utilizar objetos Java de forma transparente como objetos PHP
Y la extensin de CORBA puede ser utilizada para acceder a objetos remotos.
PHP tiene unas caractersticas muy tiles para el procesamiento de texto, desde
expresiones regulares POSIX extendidas o tipo Perl hasta procesadores de documentos
XML. Para procesar y acceder a documentos XML, soportamos los estndares SAX y
DOM. Puede utilizar la extensin XSLT para transformar documentos XML.
Si usa PHP en el campo del comercio electrnico, encontrar muy tiles las funciones
Cybercash, CyberMUT, VeriSign Payflow Pro y CCVS para sus programas de pago.
Para terminar, contamos con muchas otras extensiones muy interesantes, las funciones
del motor de bsquedas mnoGoSearch, funciones para pasarelas de IRC, utilidades de
compresin (gzip, bz2),, conversin de calendarios, traduccin .....
Qu necesito?
En este manual se asume que cuenta con un servidor que soporta PHP y que todos los
archivos con la extensin .php son manejados por PHP. En la mayora de servidores, sta es
la extensin que toman los archivos PHP por defecto, pero pregunte al administrador de su
servidor para estar seguro. Si su servidor soporta PHP, entonces no necesita hacer nada,
solamente crear sus archivos .php y guardarlos en su directorio web, y el servidor, como por
arte de magia, los analizar para . No hay necesidad de compilar nada, tampoco tiene
necesidad de instalar otras herramientas. Mrelo de esta manera, estos archivos de PHP son
tan simples como archivos de HTML con una nueva familia de etiquetas que le permiten una
gran cantidad de cosas. La mayora de las compaas de hospedaje de pginas web ofrecen
el soporte que necesita para usar PHP, pero si por alguna razn ellos no lo hacen, considere
leer la seccin titulada Recursos PHP para mas informacin acerca de compaas de
hospedaje que soportan PHP
5
instale todos estos productos con solamente unos movimientos de su mouse. Es muy fcil
instalar un servidor web con soporte para PHP en cualquier sistema operativo, incluyendo
Linux y Windows. En Linux, rpmfind y PBone le ayudarn a encontrar un RPM.
El navegador realiza una llamada al servidor web, que pasa la peticin a travs de la
interfaz PHP del servidor web(1). La interfaz del servidor web llama al intrprete Zend
(2), que accede al disco donde estn las pginas PHP. El servidor web recupera el
cdigo de la pgina PHP y lo enva al compilador (3). El compilador de Zend crea una
versin compilada de la pgina que es pasada al mdulo de ejecucin de Zend (4). Este
mdulo genera el cdigo HTML que ser visto por el navegador. Si existieran llamadas
a otros mdulos, como bases de datos, XML o Java, el intrprete de Zend la enva a
travs del mdulo especfico para procesar la peticin, y devuelve el resultado a la
interfaz del servidor web (5) que enviar el cdigo HTML al navegador (6).
Con Zend Compiler se permitir a los desarrolladores compilar sus propios script de
PHP y distribuirlos. De esta forma se pretende proteger el cdigo fuente y as crear una
especie de copyright, permitiendo a las empresas crear aplicaciones y soluciones
software basado en PHP. Adems tambin se espera la presentacin de productos
como Zend Cach, un mdulo que almacena en una memoria intermedia del servidor
web la aplicacin PHP ya interpretada. Este proceso consigue mejorar el tiempo de
respuesta de cara al usuario siendo ideal para website con gran cantidad de visitas. De
esta forma se trata de evitar las continuas compilaciones de las pginas cada vez que
son solicitadas.
6
Inconvenientes
Ejemplos ofuscacin.
Un ejemplo simple de ofuscacin es llamar a las variables o funciones con palabras reservadas
del lenguaje aadiendo algn smbolo
int int_;
Con esta lnea definimos una funcin con un parmetro entero que devuelve un valor long int,
que por otra parte siempre ser 0.
_int-_int;
(_int-_int)!;
(((!(int_-int_)<<!(int_-int_))<<(!(int_-int_)<<!(int_-int_)))|(!(int_-
int_)<<!(int_-int_)));
Como interpreta?
7
C, pero al mismo tiempo los cambios en el cdigo PHP tienen efecto de inmediato.
No todos los archivos son interpretados por el plug-in de PHP, sino slo aquellos que hayan sido
definidos en la configuracin del servidor como tales, puesto que la interpretacin de cdigo es un
proceso que toma un tiempo mayor al que se emplea en enviar una pgina tal como est. Es comn
utilizar una o varias de las siguientes extensiones para informar al servidor que debe interpretarlas:
.php, .phtml, .php3 y .php4.
Puede ser que no todas estn disponibles en su sistema, esto depende de la instalacin que haya
realizado. Ante la duda, utilice la primera forma
Todas las instrucciones se separan de la instruccin siguiente con un ; (punto y coma), y se asume que
el final de la inclusin de cdigo limita instrucciones:
1-.
<?php
echo 'si se quiere mostrar documentos XHTML o XML, debe hacerse as';
?>
2-.
<script language="php">
echo 'algunos editores (como FrontPage) no les gusta
las instruciones de proceso';
</script>
3-.
<? echo 'esta es la forma ms simple, una instrucin de procesado SGML'; ?>
<?= expression ?> Esto es una forma corta para "<? echo expression ?>"
8
4-.
<% echo 'Quiz use de forma opcional etiquetas de estilo ASP'; %>
<%= $variable; # Esto es una forma corta para "<% echo . . ." %>
Las etiquetas vistas en los ejemplos uno y dos estn siempre disponibles, el ejemplo uno es el
ms comn y recomendado de los dos.
Las etiquetas cortas (ejemplo tres) estn solo disponibles cuando se activan mediante la directiva
short_open_tag en el fichero de configuracin php.ini o si PHP se configur con la opcin --
enable-short-tags .
Las etiquetas de estilo ASP (ejemplo cuatro) estn solo disponibles cuando se activan mediante la
directiva asp_tags en el fichero de configuracin php.ini.
Nota 1:
El uso de etiquetas cortas debe ser evitado cuando se desarrollan aplicaciones o librerias que estn pensadas para su
redistribucin, o extender en servidores PHP que no estn bajo su control, porque quiz las etiquetas cortas no estn
soportadas en un servidor determinado. Por portabilidad, redistribucin de cdigo, asegrese no usar etiquetas cortas.
Nota 2:
En PHP 5.2 y anteriores, no se permite que un fichero contenga nicamente la etiqueta de inicio de bloque <?php.
En PHP 5.3 si se permite.
Nota 3:
Desde PHP 5.4, la etiqueta abreviada de echo <?= siempre es reconocida y vlida, sin tener en cuenta la
configuracin de short_open_tag.
Comentarios
Los comentarios en PHP se pueden poner en varios formatos, de tipo C, C++ y Shell. Si bien se puede
hacer, no es recomendable mezclar distintos tipos de comentario en un archivo, sino elegir una sintaxis
y quedarse con ella durante todo el documento.
<?
echo( "Hello World" )
/* comentario
de
varias lneas */
Como en la mayora de los lenguajes, no se pueden poner comentarios dentro de otros comentarios.
9
Cuatro tipos escalares:
boolean
integer
float (nmero de punto flotante, tambin conocido como double)
string
array
object
resource
NULL
Las variables de tipo entero, flotante, string, arreglo y objeto. Todos comienzan con un signo $ya
continuacin un identificador ($a, $linea, etc.) que es sensible a maysculas y minsculas.
Normalmente PHP elegir un tipo apropiado de acuerdo al contexto para cada variable:
$a = 123; # entero
$a = 123.1; # flotante
$a = "abc"; # string
Los arreglos se denominan $arreglo[indice] en que indice puede ser un entero o un string. Esto permite
crear fcilmente arreglos asociativos (tablas de hashing).
$a[0] = "aaa";
$a[1] = 22;
$edad["pedro"] = 30;
$edad["agustin"] = 35;
Nota: Para comprobar el tipo y el valor de una expresin, utilice la funcin var_dump().
Para obtener una representacin legible para humanos del tipo para propsitos de depuracin, use
la funcin gettype(). Para comprobar un cierto tipo, no use gettype(), si no las funciones is_tipo.
Algunos ejemplos:
<?php
$un_bool = TRUE; // un valor booleano
$un_str = "foot"; // una cadena
$un_str2 = 'foot'; // una cadena
10
$un_int = 12; // un entero
Booleanos
Este es el tipo ms simple. Un boolean expresa un valor de verdad. Puede ser TRUE or FALSE.
Sintaxis
Para especificar un literal boolean, use alguna de las palabras clave TRUE o FALSE. Ambas son
insensibles a maysculas y minsculas.
<?php
$foo = True; // asigna el valor TRUE a $foo
?>
<?php
// == es un operador que prueba por
// igualdad y devuelve un booleano
if ($accion == "mostrar_version") {
echo "La versin es 1.23";
}
// esto no es necesario...
if ($mostrar_separadores == TRUE) {
echo "<hr>\n";
}
11
Conversin a booleano
Para convertir explcitamente un valor a boolean, use el moldeamiento (bool) o (boolean). Sin
embargo, en la mayora de casos no es necesario usar el moldeamiento, ya que un valor ser
convertido automticamente si un operador, funcin o estructura de control requiere un
argumento tipo boolean.
Cuando se realizan conversiones a boolean, los siguientes valores son considerados FALSE:
Advertencia
-1 es considerado TRUE, como cualquier otro nmero diferente a cero (ya sea negativo o
positivo!)
<?php
var_dump((bool) ""); // bool(false)
var_dump((bool) 1); // bool(true)
var_dump((bool) -2); // bool(true)
var_dump((bool) "foo"); // bool(true)
var_dump((bool) 2.3e5); // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array()); // bool(false)
var_dump((bool) "false"); // bool(true)
?>
Enteros
Un entero o integer es un nmero del conjunto = {..., -2, -1, 0, 1, 2, ...}.
Sintaxis
Los integer pueden ser especificados mediante notacin decimal (base 10), hexadecimal (base
16), octal (base 8) o binaria (base 2), opcionalmente precedidos por un signo (- o +).
12
Para usar la notacin octal, se antepone al nmero un 0 (cero). Para usar la notacin hexadecimal,
se antepone al nmero un 0x. Para usar la notacin binaria, se antepone al nmero un 0b.
<?php
$a = 1234; // nmero decimal
$a = -123; // un nmero negativo
$a = 0123; // nmero octal (equivalente a 83 decimal)
$a = 0x1A; // nmero hexadecimal (equivalente a 26 decimal)
?>
decimal : [1-9][0-9]*
| 0
hexadecimal : 0[xX][0-9a-fA-F]+
octal : 0[0-7]+
binario : 0b[01]+
entero : [+-]?decimal
| [+-]?hexadecimal
| [+-]?octal
| [+-]?binary
Advertencia
Si en un integer octal se da un dgito incorrecto (por ejemplo 8 o 9), el resto del nmero se
ignora.
<?php
var_dump(01090); // 010 octal = 8 decimal
?>
Desbordamiento de enteros
Si PHP encuentra un nmero fuera de los lmites de un integer, se interpretar como un float en
su lugar. Tambien, una operacin cuyo resultado es un nmero fuera de los lmites de un integer
devolver en su lugar un float.
13
Ejemplo #3 Desbordamiento de enteros en sistemas 32-bits
<?php
$large_number = 2147483647;
var_dump($large_number); // int(2147483647)
$large_number = 2147483648;
var_dump($large_number); // float(2147483648)
$million = 1000000;
$large_number = 50000 * $million;
var_dump($large_number); // float(50000000000)
?>
<?php
$large_number = 9223372036854775807;
var_dump($large_number); // int(9223372036854775807)
$large_number = 9223372036854775808;
var_dump($large_number); // float(9.2233720368548E+18)
$million = 1000000;
$large_number = 50000000000000 * $million;
var_dump($large_number); // float(5.0E+19)
?>
No existe operador de divisin de integer en PHP. 1/2produce el float 0.5. El valor puede ser
forzado a ser un integer redondeando por defecto, o mediante la funcin round() que permite un
mayor control sobre el redondeo.
<?php
var_dump(25/7); // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7)); // float(4)
?>
Conversin a enteros
Para convertir explicitamente un valor a integer, se puede emplear tanto (int) como (integer). Sin
embargo, la mayora de las veces la conversin no es necesaria, ya que un valor es convertido de
forma automtica cuando un operador, funcin o estructura de control necesite un argumento del
tipo integer. Un valor tambien puede ser convertido a integer mediante la funcin intval().
Desde booleanos
14
Desde nmeros de punto flotante
Si el float esta por debajo de los lmites de un integer (normalmente +/- 2.15e+9 = 2^31 en
plataformas de 32 bits y +/- 9.22e+18 = 2^63 en plataformas de 64 bits), el resultado es
indefinido, debido a que float no tiene la precisin suficiente para ofrecer el resultado como un
integer exacto. No se mostrar ninguna advertencia, ni siquiera un aviso cuando esto ocurre!
Advertencia
Nunca se debe convertir una fraccin desconocida a un integer, ya que a veces puede producir
resultados inesperados.
<?php
echo (int) ( (0.1+0.7) * 10 ); // muestra 7!
?>
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
Formalmente:
LNUM [0-9]+
DNUM ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})
Advertencia
15
Adicionalmente, los numeros racionales que son representables exactamente como nmeros de
punto flotante en base 10, como 0.1 o 0.7, no tienen una representacin exacta como nmeros de
punto flotante en base 2, el cual es usado internamente, sin importar el tamao de la mantisa. Por
lo tanto, no se puede convertir en sus contrapartes binarias internas sin una pequea prdida de
precisin. Esto puede llevar a confundir resultados: Por ejemplo, floor((0.1+0.7)*10) usualmente
retornar 7 en lugar del 8 esperado, ya que la representacin interna ser algo as como
7.9999999999999991118....
Conversin a flotante
Para ms informacin sobre las conversiones de string a float, vea Conversin de cadenas a
nmeros. Para valores de otros tipos, la conversin es la misma que si el valor hubiese sido
convertido a integer y luego a float. Vea Conversin a entero para ms informacin. A partir de
PHP 5, una noticia es generada si intenta convertir un objeto a float.
Comparing floats
Para comprobar la igualdad de valores de punto flotante, se utiliza un lmite superior en el error
relativo debido al redondeo. Este valor se conoce como el epsilon de la mquina o unidad de
redondeo y es la menor diferencia aceptable en los clculos.
<?php
$a = 1.23456789;
$b = 1.23456780;
$epsilon = 0.00001;
NaN
Algunas operaciones numricas pueden resultar en un valor representado por la constante NAN.
Este resultado representa un valor no definido o no representable mediante clculos de coma
16
flotante. Cualquier comparacin, ya sea poco rgida o estricta, de esta valor con cualquier otro
valor, incluido l mismo tendr un resultado de FALSE.
Ya que NAN representa cualquier nmero de diferentes valores, NAN no debera compararse con
otros valores, incluido l mismo; en su lugar debera comprobarse usando la funcin is_nan().
Cadenas
Un string es una serie de caracteres donde un caracter es lo mismo que un byte. Esto significa que
PHP solo soporta el conjunto de 256 caracteres y por lo tanto no tiene soporte nativo Unicode.
Nota: No existe problema alguno para que un string sea muy grande. PHP no impone ningn
lmite para el tamao de un string; el nico lmite es la memoria disponible en el ordenador donde
se est ejecutando PHP.
Sintaxis
comillas simples
comillas dobles
sintaxis heredoc
sintaxis nowdoc (desde PHP 5.3.0)
Comillas simples
Para especificar una comilla simple literal, se escapa con una barra invertida
(\). Para especificar una barra invertida literal, se duplica (\\). Todas las
otras instancias de barras invertidas sern tratadas como una barra invertida
literal: esto significa que otras secuencias de escape que se puedan utilizar,
tales como \r or \n, sern mostradas literalmente como se especifican en
lugar de tener cualquier significado especial
<?php
echo 'Esto es una cadena sencilla';
17
// Resultado: Arnold una vez dijo: "I'll be back"
echo 'Arnold una vez dijo: "I\'ll be back"';
Comillas dobles
Si un string est encerrado entre comillas dobles ("), PHP interpretar ms sentencias de escape
como caracteres especiales:
Caracteres escapados
Sentencia Significado
\n avance de lnea (LF o 0x0A (10) en ASCII)
\r retorno de carro (CR o 0x0D (13) en ASCII)
\t tabulador horizontal (HT o 0x09 (9) en ASCII)
\v tabulador vertical (VT o 0x0B (11) en ASCII) (desde PHP 5.2.5)
\e escape (ESC o 0x1B (27) en ASCII) (desde PHP 5.4.0)
\f avance de pgina (FF o 0x0C (12) en ASCII) (desde PHP 5.2.5)
\\ barra invertida
\$ signo del dlar
\" comillas dobles
la secuencia de caracteres que coincida con la expresin regular es un caracter
\[0-7]{1,3}
en notacin octal
\x[0-9A-Fa- la secuencia de caracteres que coincida con la expresin regular es un caracter
f]{1,2} en notacin hexadecimal
Al igual que en la delimitacin de un string mediante comillas simples, escapar cualquier otro
caracter puede dar lugar a que se muestre tambien la barra invertida. Antes de PHP 5.1.1, la barra
invertida en \{$var} no se mostraba.
18
Anlisis de variables
Cuando un string es especificado mediante comillas dobles, las variables dentro de dicha cadena
son analizadas.
Existen dos tipos de sintaxis: una simple y otra compleja. La sintaxis simple es la ms empleada
y conveniente. Proporciona una forma de incluir una variable, un valor de un array o una
propiedad de un object dentro de un string con el mnimo esfuerzo.
La sintaxis compleja puede ser reconocida por las llaves que encierran la expresin.
Sintaxis simple
Si se encuentra un signo de dlar ($), el analizador vidamente coger el mayor nmero de
smbolos para formar un nombre de variable vlido. Encerrar el nombre de la variable entre
llaves permite especificar explcitamente el final del nombre.
<?php
$jugo = "manzana";
De forma parecida, el ndice de un array o la propiedad de un object puede ser analizado. Con los
ndices de los arrays, el corchete de cierre (]) marca el final del ndice. La misma regla se puede
aplicar a las propiedades de los objetos y a las variables simples.
<?php
$jugos = array("manzana", "naranja", "koolaid1" => "prpura");
class people {
public $john = "John Smith";
public $jane = "Jane Smith";
public $robert = "Robert Paulsen";
19
$people = new people();
Para casos ms complejos se debe emplear la sintaxis compleja que se vea luego.
Los caracteres dentro de un string pueden ser accedidos y modificados especificando la posicin
de caracter deseado (en base a la posicin cero del primer caracter del string) empleando los
corchetes de array, como en $str[42]. Piense en este caso que un string se comporta como un
array de caracteres. Las funciones substr() y substr_replace() pueden ser empleados para extraer y
reemplazar ms de un caracter.
Nota: Los String tambin pueden accederse utilizando llaves, como en $str{42}, para el mismo
propsito.
Advertencia
Escribir fuera del rango es compensado rellenando el string con espacios. Los tipos que no sean
integer son convertidos a integer. Las compensaciones fuera de rango emiten E_NOTICE. Las
compensaciones negativas emiten E_NOTICE en la escritura pero en la lectura obtienen una
cadena vaca. Slo se emplea el primer carcter de un string asignado. La asignacin de un string
vaco asigna un byte NULL.
<?php
// Obtencin del primer caracter de una cadena
$str = 'Esto es un test.';
$first = $str[0];
20
$last = $str[strlen($str)-1];
?>
Nota: El acceso a variables de otros tipos (sin incluir arrays u objetos implementando las interfaces apropiadas)
utilizando [] o {} silenciosamente retorna NULL.
Sobre strings se define la concatenacin $a . $b como operador. Para generar caracteres especiales se
usa :
echo "$" # $
echo "\" #
Cuando una string es evaluada en un contexto numrico, el valor resultante y el tipo se determina
como se explica a continuacin.
Si el string no contiene ninguno de los caracteres '.', 'e', o 'E' y el valor numrico est entre los
lmites del tipo entero (como se define en PHP_INT_MAX), la string ser evaluada como un integer.
En todos los demas casos ser evaluado como un float.
El valor es dado por la parte inicial del string. Si el string empieza con un nmero vlido, ste
ser el valor usado. De otra forma, el valor ser 0 (cero). Se considera nmero vlido a un signo
opcional, seguido de uno o ms dgitos (opcionalmente puede contener un punto decimal),
seguido de un exponente opcional. El exponente es una 'e' o 'E' seguida de uno o ms dgitos.
<?php
$foo = 1 + "10.5"; // $foo es float (11.5)
$foo = 1 + "-1.3e3"; // $foo es float (-1299)
$foo = 1 + "bob-1.3e3"; // $foo es integer (1)
$foo = 1 + "bob3"; // $foo es integer (1)
$foo = 1 + "10 Small Pigs"; // $foo es integer (11)
$foo = 4 + "10.2 Little Piggies"; // $foo es float (14.2)
$foo = "10.0 pigs " + 1; // $foo es float (11)
$foo = "10.0 pigs " + 1.0; // $foo es float (11)
?>
Para ms informacin sobre esta conversin, consulte la pgina del manual UNIX
correspondiente a strtod(3).
21
Para probar cualquiera de los ejemplos en esta seccin, copie y pegue los ejemplos e incluya la
siguiente lnea para ver que est ocurriendo:
<?php
echo "\$foo==$foo; tipo es " . gettype ($foo) . "<br />\n";
?>
En PHP, los string se implementan como una matriz de bytes y con un entero
que indica la longitud del buffer. No guarda ninguna informacin sobre cmo
traducir esos bytes, relegando esa tarea al programador. No existe ninguna
limitacin sobre el valor que puede contener un string; en concreto, est
permitido colocar un bytes con valor 0 (bytes NUL) en cualquier posicin
del string (existen algunas funciones, marcadas en este manual como que no
utilizan "modo binario seguro", podran rechazar estos strings para aquellas
bibliotecas que ignoren los datos preceden a un byte NUL.)
22
BASICO HTML
Introduccin
Hojas de Estilo
Posicionamiento de Contenidos
Fuentes Descargables
Las hojas de estilo permiten especificar atributos para los elementos de su pgina web.
Con el posicionamiento de contenidos se puede asegurar que las diferentes partes
sern mostradas exactamente donde quiera que aparezcan y podr modificar su
aspecto y posicion tras ser mostrada. Con las fuentes descargables podemos asegurar
que siempre se utilizara la fuente correcta, pues podemos enviar la fuente junto con la
pgina.
Las hojas de estilo nos permiten un mayor control sobre el aspecto de nuestros
documentos. Con ellas podemos especificar muchos atributos tales como colores,
mrgenes, alineacin de elementos, tipos y tamaos de letras, y muchos ms. Podemos
utilizar bordes para hacer que ciertos elementos resalten del resto de un documento.
Podemos especificar que se utilicen diferentes fuentes para diferentes elementos tales
como prrafos o cabeceras.
23
Adems podemos emplear hojas de estilo como patrones o pginas maestras de forma
que mltiples pginas puedan tener el mismo aspecto.
Las hojas de estilo pueden crearse empleando dos tipos de sintaxis, CSS (Cascade
Style Sheets) y JavaScript.
Para protejer los derechos de autor de los diseadores de fuentes, estas estn
protegidas de forma que es imposible que el usuario las copie y las pueda usar de
24
nuevo. Asi podemos incluir fuentes en nuestras pginas sin tener que preocuparnos de
que los usuarios las puedan copiar.
Hojas de Estilo
En una definicion de estilo cada propiedad es seguida por dos puntos y el valor de
dicha propiedad. Cada par propiedad/valor est separado del siguiente por un punto y
coma (;).
Por ejemplo, la siguente hoja de estilo en cascada contiene dos definiciones de estilos.
El primero especifica que todos los prrafos, <p>, se veran en negrita y en color
blanco. El segundo har que todas las cabeceras, <h1>, aparezcan centradas.
<style type="text/css">
<!--
p {font-weight: bold; color: white;}
h1 {text-align: center;}
-->
</style>
La definicin de estilos se puede encerrar entre commentarios (<!-- ... -->), de esta
forma los navegadores que no reconozcan la etiqueta <style>la ignorarn.
25
Es importante no incluir dobles comillas en la especificacion de valores de atributos en
sintaxis CSS.
document.tags.h1.color = "red"
La propiedad tags siempre se aplica al objeto document del documento actual, por
eso algunos navegadores permiten omitir document en la
expresion document.tags.
El siguiente ejemplo usa JavaScript para crear una hoja de estilo que contiene dos
definiciones de estilo. El primero especifica que todos los prrafos<p> se veran en
negrita y en color blanco. El segundo har que todas las cabeceras <h1> aparezcan
centradas.
<style type="text/javascript">
tags.p.weight = "bold";
tags.p.color = "white";
tags.h1.textAlign = "center";
</style>
No se pueden encerrar entre comentarios (<!-- ... -->) los contenidos de una hoja de
estilo creada mediante JavaScript.
26
Tambin se puede utilizar with para abreviar la definicin de estilos para elementos
sobre los que hay que modificar varias propiedades. Este ejemplo especifica que todas
las etiquetas <p> sern verdes, negritas, cursivas y usaran la fuente helvtica.
with (tags.p)
{
color = "green";
fontWeight = "bold";
fontStyle = "italic";
fontFamily = "helvetica";
}
Ejemplos
Usando hojas de estilo se pueden especificar muchos atributos de estilo. Algunas de
estas caractersticas son el alineacin, indentacin y color del texto, la familia, peso y
estilo de las fuentes,... Podemos seleccionar una imagen o un color de fondo para
cualquier elemento. Tambin podemos escoger el color y estilo de las marcas de lista.
El siguiente ejemplo muestra una hoja de estilo sencilla descrita mediante sintaxis CSS
y JavaScript. En ella se especifica que todos los elementos <p>tendran mrgenes
derecho e izquierdo y que su texto estar centrado. Todos los elementos <h4> estarn
subrayados y en verde. Todos los elementos<h5> se mostraran en maysculas,
tendran un borde con aspecto 3D sobresaliente de 4 puntos de ancho y color rojo. Su
texto ser rojo y el fondo amarillo. Finalmente, los <blockquote> sern azules y en
cursiva, su altura de lnea (interlnea) ser un 150% mayor que por defecto y su
primera lnea estar indentado un 10%.
Sintaxis CSS
<style type="text/css">
p {text-align: center; margin-left: 20%;
margin-right: 20%;}
h4 {text-decoration: underline; color: green;}
27
h5
{
text-transform: uppercase;color:red;
border-width: 4pt; border-style: outset;
background-color: yellow; padding: 4pt;
border-color: red;}
}
blockquote
{
color: blue; font-style: italic;
line-height: 1.5; text-indent: 10%
}
</style>
Sintaxis JavaScript
<style type="text/javascript">
with (tags.p)
{
textAlign = "center"; marginLeft = "20%";
marginRight = "20%";
}
with (tags.h4) {textDecoration = "underline";
color = "green";}
with (tags.h5)
{
textTransform = "uppercase"; color =
"red";
borderWidth = "4pt"; borderStyle =
"outset";
backgroundColor = "yellow";
paddings("4pt");
borderColor = "red";
}
with (tags.blockquote)
{
color = "blue"; fontStyle = "italic";
lineHeight = "1.5"; textIndent = "20pt";
}
</style>
28
Uso de la hoja de estilo
<h4>Titulo subrayado</h4>
<blockquote>
Esto es un bloque. Normalmente los bloques
estn indentados,
pero en este, adems, la primera lnea tiene
una indentacin
extra. Tambin la interlnea es mayor de lo
habitual.
</blockquote>
<h5>Titulo h5 en mayusculas y con borde</h5>
<p>Este prrafo est centrado. Tambin tiene unos
amplios
mrgenes derecho e izquierdo.</p>
Titulo subrayado
Esto es un bloque. Normalmente los bloques estn indentados, pero en
este, adems, la primera lnea tiene una indentacin extra. Tambin la interlnea es
mayor de lo habitual.
Herencia de Estilos
Un elemento HTML que contenga a otro se considera como el padre del elemento que
contiene, y el elemento contenido se considera el elemento hijo.
29
<body>
<h1>El titulo <em>es</em> importante!</h1>
</body>
En muchos casos, los hijos adquieren o heredan el estilo de los elementos de sus
padres. Por ejemplo, supongamos que asignamos a <h1> el estilo color azul:
<style type="text/css">
h1 {color: blue;}
</style>
<body>
<h1>El titulo <em>es</em> importante!</h1>
</body>
Para establecer las propiedades de estilo por defecto para todos los elementos de un
documento lo normal es asignrselas al elemento <body>. Por ejemplo, el siguiente
cdigo fija el color por defecto del texto a verde:
Sintaxis CSS
<style type="text/css">
body {color: green;}
</style>
Sintaxis JavaScript
<style type="text/javascript">
tags.body.color = "green"
</style>
30
Muy pocas propiedades no son heredadas de padres a hijos, pero en la mayora de los
casos el resultado final es el mismo que si lo hiciesen. Por ejemplo, la propiedad color
de fondo no se hereda. Si un hijo no especifica un color de fondo propio, se vera el
color de fondo del padre a travs suyo, tal como ocurriria si heredase la propiedad.
Para ms informacin sobre las propiedades que se heredan y cuales no, dirigirse al
manual de referencia del final de este tutorial.
En esta seccin se vern las diferentes formas de definir estilos y como aplicar esos
estilos a los elementos HTML.
Una hoja de estilo es una serie de una o ms definiciones de estilo. Podemos definir
una hoja de estilos en el interior del documento que la utiliza, pero tambin podemos
utilizar hojas de estilo desde un documento externo. Por ejemplo, podemos emplear
una nica hoja de estilo para definir el estilo empleado por un grupo de personas en
sus pginas.
Cuando use <style> podr especificar el atributo type para indicar que tipo de
sintaxis se va a emplear. Los dos valores posibles
son"text/css" y "text/javascrip". EL valor por defecto es "text/css".
El siguiente ejemplo define una hoja de estilo que especifica que todos los titulos de
nivel 4 sern en maysculas y azules, y todos los bloques en cursiva y rojos:
Sintaxis CSS
31
<head>
<style type="text/css">
h4 {text-transform: uppercase; color:
blue;}
blockquote {font-style: italic; color:
red;}
</style>
</head>
<body>
...
</body>
Sintaxis JavaScript
<head>
<style type="text/javascript">
tags.h4.textTransform = "uppercase"
tags.h4.color = "blue"
tags.blockquote.fontStyle = "italic"
tags.blockquote.color = "red"
</style>
</head>
<body>
...
</body>
32
Se puede definir una hoja de estilo en un fichero distinto del que contiene la pgina y
despues enlazarlos. Las ventajas de este mtodo son que podremos utilizar la hoja de
estilo desde cualquier documento HTML. Se podra pensar en una hoja de estilo asi
definida como en un patrn que pudiera aplicarse a cualquier documento. De esta
forma, se puede aplicar un estilo a todas las pginas servidas desde un sitio web sin
ms que incluir un enlace al fichero con la hoja de estilo en cada pgina.
La sintaxis para definir estilos en ficheros es identica a la que se usa para definirlos en
el propio documento, excepto que no es necesario incluir la etiqueta <style>. He aqu
un ejemplo:
Sintaxis CSS
Sintaxis JavaScript
Para utilizar esta hoja de estilo, se usa la etiqueta <link> como se muestra en el
siguiente ejemplo:
Sintaxis CSS
<head>
<title>El titulo</title>
<link rel = stylesheet type = "text/css" href
= "estilo.css">
</head>
Sintaxis JavaScript
33
<head>
<title>El titulo</title>
<link rel = stylesheet type =
"text/javascript" href = "estilo.js">
</head>
Puede haber casos en que interese aplicar un estilo selectivamente. Por ejemplo, se
puede querer que los prrafos de un documento sean unas veces rojos y otras veces
azules. En este caso definir un estilo que se aplique a todos los prrafos no ser la
solucion correcta. Podemos obtener el efecto deseado definiendo una clase de estilo y
especificando cuando queremos que sea utilizada.
Para aplicar una clase de estilo a un elemento HTML, primero se debe definir la clase
en la hoja de estilo, y despus se utilizar empleando el atributoclass en cualquier
elemento.
Sintaxis CSS
<style type="text/css">
.GREENBOLD {color: green; font-weight: bold;}
</style>
Sintaxis JavaScript
<style type="text/javascript">
classes.GREENBOLD.all.color = "green";
classes.GREENBOLD.all.fontWeigth = "bold";
</style>
34
<p class=GREENBOLD>
Este prrafo usa la clase de estilo GREENBOLD.
Se puede
utilizar el atributo class para especificar
una clase de estilo
para cualquier elemento HTML.
</p>
<blockquote class=GREENBOLD>
Este bloque usa la clase de estilo GREENBOLD.
En consecuencia, es
verde y est en negrita. Puede ser til para
hacer que los bloques
resalten del resto de la pgina.
</blockquote>
Con sintaxis JavaScript no se pueden utilizar guiones "-". La razn es que el guin es
un operador de JavaScript. Los nombres de clases no pueden contener tampoco
operadores como: -, +, *, /, %, ...
En el siguiente ejemplo se crea una clase de estilo naranja que podr utilizar cualquier
elemento HTML. Tambin se crea una clase rojo que slo podrn utilizar prrafos y
bloques.
Sintaxis CSS
<style type="text/css">
35
.naranja {color: orange; font-weight: bold;}
p.rojo {color: red; font-weight: bold;}
blockquote.rojo {color: red; font-weight:
bold;}
</style>
Sintaxis JavaScript
<style type="text/javascript">
classes.naranja.all.color = "orange";
classes.naranja.all.fontWeight = "bold";
classes.rojo.p.color = "red";
classes.rojo.p.fontWeight = "bold";
classes.rojo.blockquote.color = "red";
classes.rojo.blockquote.fontWeight = "bold";
</style>
Este prrafo es del color por defecto, porque no utiliza la clase rojo
36
Este bloque usa la clase rojo.
Un elemento HTML slo puede utilizar una clase de estilo. Si se especifican dos o ms
clases, se utilizaran la primera. Por ejemplo, en el siguiente cdigo un prrafo intenta
usar las clases rojo y naranja. Como resultado final se acaba empleando la clase rojo
que es la primera que se especifica.
Ejemplo:
<p class="rojo" class="naranja">Otro prrafo
rojo.</p>
Resultado:
Tambin son tiles para definir capas de contenidos HTML posicionadas de forma
precisa.
Parar definir estilos con nombre, en sintaxis CSS, se precede el nombre con el signo #.
En JavaScript se utiliza la propiedad ids.
37
En el siguiente cdigo se define una clase de estilo PRINCIPAL. Esta clase especifica
una fuente de 15 puntos, negrita y de color rojo, y una interlnea de 20 puntos.
Tambin se define un estilo con nombre llamado AZUL1 cuyo color es azul.
Sintaxis CSS
<style type="text/css">
.PRINCIPAL
{
line-height: 20pt;
font-size:15pt;
font-weight: bold;
color: red;
}
#AZUL1 {color: blue;}
</style>
Sintaxis JavaScript
<style type="text/javascript">
with(classes.PRINCIPAL.all)
{
lineHeight = "20pt";
fontSize = "15pt";
fontWeight = "bold";
color = "red";
}
ids.AZUL1.color = "blue";
</style>
<p class="PRINCIPAL">
Aqu se puede ver un texto rojo y en
negrita. En este
prrafo la interlnea y el tamao de la
fuente
son mayores de lo habitual.
</p>
<p class="PRINCIPAL" id="AZUL1">
38
Este prrafo es casi igual al anterior.
Est en
negrita y su fuente es mayor de lo
habitual. Aunque usa la clase
PRINCIPAL es azul porque se utiliza el
estilo con nombre AZUL1.
</p>
Se puede conseguir este nivel control sobre la aplicacion de estilos usando los criterios
de seleccin contextual. Estos, en general, permiten especificar que un estilo se
aplicara slo si un elemento se encuentra anidado dentro de un elemento de otro cierto
tipo.
Sintaxis CSS
<style type="text/css">
39
h4 em {color: green;}
</style>
Sintaxis JavaScript
<style type="text/javascript">
contextual(tags.h4, tags.em).color
="green";
</style>
Ahora veremos otro ejemplo que hace que las marcas los elementos de lista que
hereden de al menos dos listas desordenadas sean de color azul.
Sintaxis CSS
ul ul li {color: blue;}
Sintaxis JavaScript
Se pueden utilizar los criterios de seleccin contextual para buscar etiquetas, clases,
ids o combinaciones de estos. En el siguiente ejemplo se crea la clase MAGENTA que
lo colorea todo de magenta. Todos los prrafos MAGENTA que estn dentro de
40
un <div> estarn en cursiva. Adems los textos dentro de <b> anidados dentro de
prrafos dentro de un <div> en MAGENTA usaran una fuente grande.
Sintaxis CSS
<style type="text/css">
.MAGENTA {color: magenta;}
div p.MAGENTA {font-style: italic;}
div p.MAGENTA b {font-size: large;}
</style>
Sintaxis JavaScript
<style type="text/javascript">
classes.MAGENTA.all.color = "magenta";
contextual(tags.div,
classes.MAGENTA.p).fontStyle = "italic";
contextual(tags.div, classes.MAGENTA.p,
tags.b).fontSize = "large";
</style>
<div class=MAGENTA>
<h4> Titulo h4 en MAGENTA</h4>
<p>Este prrafo deberia ser magenta y
cursivo. Ahora
viene un <b>texto grande</b>. Conseguimos
este efecto con
seleccin contextual</p>
</div>
<p class="MAGENTA">Este prrafo todavia es
MAGENTA, pero
como no esta dentro de un bloque <div>, no
es cursivo.</p>
41
Titulo h4 en MAGENTA
Este prrafo deberia ser magenta y cursivo. Ahora viene un texto grande.
Conseguimos este efecto con seleccin contextual
Este prrafo todavia es MAGENTA, pero como no esta dentro de un bloque <div>, no
es cursivo.
Sin embargo, en general, es mejor definir todos los estilo usados en un documento en
un nico lugar. Asi es ms fcil realizar modificaciones en su estilo sin tener que
recorrerlo. Si se necesita hacer algun cambio slo es necesario hacerlos una vez y el
cambio automticamente se aplica a todo el documento.
Sintaxis CSS
42
style="color: red; font-style:
italic;">palabra</span> es
diferente al resto.
<p>
Sintaxis JavaScript
Este prrafo es del color habitual, pero esta palabra es diferente al resto.
43
Supongamos, por ejemplo, que estamos escribiendo un informe sobre los beneficios de
un producto de red de una compaia llamada AlpargataNet. Puede que se necesite usar
tres hojas de estilo: una definiendo el estilo habitual de los informes, otra que defina el
estilo de los productos de red, y otra que defina el estilo de la compaia SneakerNet.
<style type="text/css">
@import
"http://www.alpargatanet.com/estilo/empresa";
@import "estilos/informe";
@import "estilos/redes";
h1 { color: red; }
</style>
<link rel=stylesheet type="text/css"
href=url(http://www.alpargatanet.com/estilo/empres
a)>
<link rel=stylesheet type="text/css"
href=url(estilos/informe)>
<link rel=stylesheet type="text/css"
href=url(estilos/redes)>
h1 {color: red;} /* tiene preferencia sobre
las hojas externas */
Entre las hojas de estilo externas, la ltima tiene precedencia sobre las dems. Asi, en
caso de conflicto, se escoge el estilo de la ltima hoja de estilo especificada.
Los estilos definidos para elementos individuales tienen precedencia sobre los
definidos en el elemento <style> y sobre los definidos en las hojas externas. En
general, los estilos locales se sobreponen a los generales, como se muestra en el
siguiente ejemplo.
Sintaxis CSS
<style type="text/css">
p {color: blue;}
b {color: green;}
</style>
Sintaxis JavaScript
44
<style type="text/javascript">
tags.p.color = "blue";
tags.b.color = "green";
</style>
Tal y como debera ser este prrafo es de color azul, y esta parte en negrita es de
color verde
En esta seccin se exponen las opciones de formato de los elementos de bloque. Los
elementos de bloque comienzan en una nueva lnea. Por ejemplo,<h1> y <p> son
elementos de bloque, pero <em> no lo es.
45
Formato de Bloques: Introduccin y Ejemplos
Las hojas de estilo tratan a cada elemento de bloque como si estuviera rodeado de una
caja. Cada caja puede tener caractersticas de estilo propias tales como mrgenes,
bordes, relleno y una imagen o color de fondo.
Los mrgenes indican la separacin entre el borde de la caja y el borde del documento.
Estos bordes pueden tener apariencia plana o tridimensional. El relleno ("padding")
indican la separacin entre el borde de los elementos y el contenido de los mismos.
Tambin se puede fijar la anchura de los elementos de bloque, bien mediante un valor
especifico, o bien mediante un porcentaje de la anchura total del documento. En este
caso es redundante fijar los mrgenes derecho o izquierdo y la anchura.
Si se especifican la anchura y los dos mrgenes, el valor de del margen izquierdo tiene
prioridad sobre los dems valores en caso de conflicto. En este caso el valor del
margen derecho especifica la distancia mxima desde el borde derecho de elemento
que lo contiene. El valor del anchura es utilizado slo si no sobrepasa los limites de
anchura del elemento que lo contiene.
46
Sintaxis CSS
<style type="text/css">
p {
color: #ffffff; /* blanco */
/* mrgenes */
margin-left: 20%; margin-right: 20%;
/* anchura del borde */
border-top-width: 10pt; border-
bottom-width: 10pt;
border-right-width: 5pt; border-left-
width: 5pt;
/* estilo y color del borde */
border-style: outset; border-color:
blue;
/* relleno */
padding-top: 10pt; padding-bottom:
10pt;
padding-right: 20pt; padding-left:
20pt;
}
h3 {
/* alineacin al centro*/
text-align: center;
/* tamao y peso de la fuente*/
font-size: 14pt; font-weight: bold;
background-image: url("papel.jpg");
/* anchura del 80% */
width: 80%;
border-color: green; border-style:
solid;
/* todas las partes del borde tienen
la misma anchura */
border-width: 10pt;
/* relleno uniforme */
padding: 5%;
}
</style>
Sintaxis JavaScript
47
<style type="text/javascript">
with (tags.p) {
/* mrgenes */
marginLeft="20%"; marginRight="20%";
/* anchura del borde */
borderTopWidth="10pt";
borderBottomWidth="10pt";
borderRightWidth="5pt";
borderLeftWidth="5pt";
/* estilo y color del borde */
borderStyle="outset";
borderColor="blue";
/* relleno */
paddingTop="10pt";
paddingBottom="10pt";
paddingRight="20pt";
paddingLeft="20pt";
}
with(tags.h3) {
/* alineacin al centro*/
textAlign="center";
/* tamao y peso de la fuente*/
fontSize="14pt"; fontWeight="bold";
backgroundImage="papel.jpg";
/* anchura del 80% */
width="80%";
borderColor="green";
borderStyle="solid";
/* todas las partes del borde tienen
la misma anchura */
borderWidths("10pt");
/* relleno uniforme */
paddings("5%");
}
</style>
48
tiene borde resalta mucho ms que si no lo
tiene.</p>
<p>Este es otro prrafo con borde. Ten cuidado con
los
bordes, no los hagas demasiado anchos, pues de lo
contrario ocuparan
demasido espacio.</p>
Mrgenes
Los mrgenes indican la separacin entre el borde del bloque y el borde del
documento, o elemento padre. Se pueden fijar los mrgenes derecho, izquierdo,
superior e inferior. Para ello se deben utilizar las siguientes nombres de propiedad:
Sintaxis CSS
margin-top
margin-bottom
margin-left
49
margin-right
margin
Sintaxis JavaScript
marginTop
marginBottom
marginLeft
marginRight
margins()
Para especificar los mrgenes por defecto para un documento se deben especificar para
la etiqueta <body>. En el siguiente ejemplo se fijan dichos mrgenes en 20 puntos a
derecha e izquierda.
Sintaxis CSS
<style type="text/css">
body {margin-left: 20pt; margin-right: 20pt;}
</style>
Sintaxis JavaScript
<style type="text/javascript">
with (tags.body) { marginLeft="20pt";
maginRight="20pt"; }
</style>
50
Bordes
Los bordes se pueden utilizar para muchas cosas, como por ejemplo, separar
elementos o destacar ciertas partes de un documento. Para que un borde se muestre es
necesario darle anchura y color. A continuacin describimos como hacerlo. Se puede
fijar la anchura del borde que rodea un elemento de bloque usando las siguientes
propiedades:
Sintaxis CSS
border-top-width
border-bottom-width
border-left-width
border-right-width
border-width
Sintaxis JavaScript
borderTopWidth
borderBottomWidth
borderLeftWidth
51
borderRightWidth
borderWidths()
Los valores que pueden tomar son tanto numricos como palabras reservadas como
thin, medium y thick. Vea una muestra:
Las propiedades de borde se puede expresar de dos formas, por separado como hasta
ahora, o combinadas como se muestra en el siguiente ejemplo:
Por separado:
p
{
border-width: 1px;
border-style: solid;
border-color: blue;
}
Combinadas:
52
p { border: 1px solid blue; }
Relleno
El relleno indican la distancia entre el borde de un elemento y su contenido. El relleno
se muestra incluso si el borde del elemento no lo hace.
Se puede fijar el tamao del relleno de un elemento de bloque utilizando las siguientes
propiedades.
Sintaxis CSS
padding-top
padding-bottom
padding-left
padding-right
Sintaxis JavaScript
paddingTop
paddingBottom
paddingLeft
paddingRight
Ejercicio: cree un estilo que aplicado a una tabla consiga que los elementos en el
interior de las celdas tengan un relleno de 16 pixels a izquierda y derecha y 8 pixels
arriba y abajo.
53
la derecha, causara un efecto parecido a si ellos mismos tambin tuviesen borde
izquierdo.
Pensemos en que ocurriria si los hijos heredasen estas caractersticas de sus padres. El
bloque <div> esta indentado 10 puntos. Sus hijos a su vez estarn indentados otros 10
puntos con respecto a el, con lo cual el aspecto global es que los hijos estarian
indentados 20 puntos.
Algo parecido ocurrira con una imagen de fondo. Si se heredase esta propiedad en vez
de ver una sola copia de la imagen de fondo, normalmente apliacada a body, veriamos
muchas copias de la esquina superior izquierda si no se cambia la alineacin por
defecto de la imagen.
Fuentes Descargables
Los ficheros de fuentes, como otros muchos recursos, se pueden conseguir en Internet,
pero el usuario no las puede grabar en disco (como puede hacer con el documento o
las imgenes). Por otro lado, hay que tener en cuenta que las fuentes estn sujetas a las
"leyes de derechos de autor", por lo que, antes de utilizarlas dentro de nuestras pginas
deberemos asegurarnos de tener permiso para hacerlo.
Para que todo funcione correctamente, al servidor habr que aadirle un nuevo tipo
MIME para que reconozca este tipo de archivos. El nuevo tipo
esapplication/font-tdpfr, asociado a la extensin .pfr.
<style type="text/css">
54
@fontdef
"http://www.gutemberg.org/fuente.pfr";
</style>
<link rel=fontdef
src="http://www.gutemberg.org/fuente.pfr">
Una vez que el fichero ha sido cargado desde el servidor donde estn las pginas,
imgenes, fuentes, etc., para utilizar estas fuentes, modificaremos el valor del
atributo face de la etiqueta <font>, por ejemplo:
<style type="text/css">
clasico { font-family: Gutemberg, sans-serif }
</style>
...
...
<div class="clasico">Este tipo de letra es la
Gutemberg</div>
Este prrafo utilizar el tipo de fuente Gutemberg si est disponible, sino utilizar la
sans-serif.
Herramientas de Diseo
55
Dos programas que sirven para crear este tipo de ficheros son:
56
<DIV>
Las etiquetas <DIV> y </DIV> se usan para agrupar elementos de bloque y poder
aplicarles un cierto estilo que nos interese. Esta etiueta de por s no produce ningn
cambio en el contenido de un documento. Es equivalente a <DIV>, slo que esta se
utiliza con elementos en lnea.
Ejemplos:
<STYLE>
Las etiquetas <STYLE> y </STYLE> se usan para crear una hoja de estilo. En su
interior podemos especificar estilos para elementos, deficir clases e identificadores y
en general establecer los estilos que se utilizaran en todo el documento.
Ejemplos:
Sintaxis CSS
<style type="text/css">
body {margin-left: 10%; margin-right: 10%;}
.limon {color: yellow;}
<style>
Sintaxis JavaScript
<style type="text/javascript">
57
tags.body.marginLeft="10%";
tags.body.marginRight="10%";
classes.limon.all.color="yellow";
<style>
<LINK>
La etiqueta <LINK> sirve para poder utilizar en un documento una hoja de estilo que
esta en otro fichero.
Sintaxis CSS
<html>
<head>
<title>Titulo</title>
<link rel=stylesheet type="text/css"
href="http://estilos/mi_estilo.html">
</head>
<body> ... </body>
</html>
Sintaxis JavaScript
<html>
<head>
<title>Titulo</title>
<link rel=stylesheet
type="text/javascript"
href="http://estilos/mi_estilo.html">
</head>
<body> ... </body>
</html>
58
<SPAN>
Las etiquetas <SPAN> y </SPAN> se utilizan para agrupar una porcin de cdigo a la
que se le va aplicar un estilo. A diferencia de <DIV>, se utiliza con elementos en lnea
en lugar de con elementos de bloque.
Este texto es normal. Este texto es diferente gracias a <span>. De nuevo el texto es
normal.
<style type="text/css">
.letron {font-family: times; font-size: 200%;
font-weight: bold;}
</style>
Resultado:
En un lugar de la Mancha...
59
STYLE
El atributo STYLE determina el estilo del elemento al que se aplique. Por ejemplo:
Sintaxis CSS
Sintaxis JavaScript
<h4 style="fontWeight='bold';
color='red'">Cabecera h4 en rojo</h4>
Cabecera h4 en rojo
CLASS
El atributo CLASS permite aplicar una clase de estilo a un elemento. Aunque CSS y
JavaScript usen sintaxis ligeramente diferentes para la definicin de clases de estilos,
la forma de usar dichas clases es comn. Ejemplo:
Sintaxis CSS
<style type="text/css">
h3.cursiva {font-style: italic;}
<style>
Sintaxis JavaScript
<style type="text/javascript">
classes.cursiva.h3.fontStyle="italic";
<style>
60
<h3 class="cursiva">Cabecera h3 cursiva</h3>
Se debe tener en cuenta que para los nombres de clase se distingue entre maysculas y
minsculas .
Para especificar que una clase puede aplicarse a todos los elementos se utiliza el
selector "all", "*" o simplemente no se especifica ninguna etiqueta cuando se definen
las propiedades de la clase. En el siguiente ejemplo todos los elemento de clase limon
sern amarillos.
Sintaxis CSS
<style type="text/css">
.limon {background-color: grey; color:
yellow;}
<style>
Sintaxis JavaScript
<style type="text/javascript">
classes.limon.all.color="yellow";
<style>
Un prrafo amarillo
61
ID
Cuando se definen hojas de estilo, se pueden crear estilos individuales con nombre.
Un elemento puede usar clases de estilos y adems usar estos estilos individuales con
nombre. Con ellos podemos crear excepciones a las clases de estilos
Para definir un estilo individual con nombre, en sintaxis CSS se utiliza el signo #,
mientras que en JavaScript se utiliza el selector ID.
En el siguiente ejemplo se define la clase calor, que hace a los prrafos ser de color
rojo y en estar en negrita. Tambin se crea un nombre de estilo, frio, que es de color
azul. Se muestra como utilizar frio para crear una excepcion a calor.
Sintaxis CSS
<style type="text/css">
p.calor {color: red; font-weight: bold;}
#frio {color: blue;}
<style>
Sintaxis JavaScript
<style type="text/javascript">
classes.calor.p.color="red";
classes.calor.p.fontWeight="bold";
ids.frio.color="blue";
<style>
62
Un prrafo caliente...
Un prrafo frio...
TAGS
Cuando se usa sintaxis JavaScript dentro del elemento <style>, podemos seleccionar
estilos usando la propiedad tag del objeto document.
El siguiente ejemplo utiliza la sintaxis JavaScript para especificar que todos los
prrafos sean de color verde.
<style type="text/javascript">
tags.p.color="green";
<style>
<style type="text/css">
p {color: green;}
<style>
La propiedad tags siempre se refiere al objeto document del documeto actual, por esto
se puede omitir document de la expresion document.tags. Asi, las dos siguentes lneas
expresan lo mismo:
document.tags.p.color="green";
tags.p.color=green";
Para definir estilos por defecto a todos los elementos de un documento se debe hacer a
traves del elemento <body>, porque todos los dems elementos heredan de este.
63
tags.body.marginLeft="10%"; /* sintaxis
JavaScript */
body {margin-left: 10%;} /* sintaxis CSS */
CLASSES
Ver la seccin CLASS de los nuevos atributos para las etiquetas HTML.
IDS
Fuentes
Tipo de Fuente
64
Sintaxis CSS: font-family
Tamao de Fuente
65
Valor inicial medium
Se aplica a todos los elementos
Heredable si
Valores porcentuales relativos al tamao del padre
Peso de Fuente
Estilo de Fuente
66
Heredable si
Valores porcentuales no aplicable
Las propiedades de las fuentes se pueden combinar para permitirnos una escritura ms
sencilla. Vea el siguinte ejemplo:
Por separado:
p
{
font-style: italic;
font-weight: bold;
font-size: 30px;
font-family: arial, sans.serif;
}
Combinadas:
Interlnea
67
Se aplica a elementos de bloque
Heredable si
Valores porcentuales relativos al tamao de la fuente
68
Alineacin del Texto
La alineacin es equivalente al atributo align de HTML. Nos permite hacer que las
lneas de texto se alineen a derecha, izquierda, centro o ambos lados a la vez. Esto
ltimo es comn en prensa, pero hay que usarlo con cuidado en lneas de poca anchura
porque puede producir un espaciado entre palabras excesivo.
Indentacin de Texto
69
Ejercicio: aplique una indentacin extra slo al primer prrafo tras un ttulo de tamao
1 (h1). Pista: tendr que seleccionar con h1 + p, que quiere decir cada p
inmediatamente precedido por un h1.
Mrgenes
Relleno
70
Anchura del los Bordes
71
Valor inicial none
Se aplica a todos los elementos
Heredable no
Valores porcentuales no aplicable
Anchura
Alineacin
72
Sintaxis CSS: float
Sin float:
73
bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla,
bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla,
bla, bla, bla, bla, ...
bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla,
bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla,
bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla,
...
bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla,
bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla,
bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla,
...
74
Clear
La propiedad clear sirve para controlar cmo se comportarn los elementos que
siguen a otros elementos flotantes. Por defecto los elementos que suguen a los que
flotan se mueven hacia arriba para rellenar el espacio disponible. Esta propiedad
permite especificar donde no habr elementos flotantes. Las opciones
son left, right y both.
Ejercico: Modifique los ejemplos anteriores en los que se usa float para descubrir su
efecto "limpiador".
Color
75
Esta propiedad especifica el color del texto.
Imagen de Fondo
76
Color de Fondo
Propiedades de Clasificacion
Display
77
Posibles valores ninguno, block, inline, list-item
Valor inicial segun HTML
Se aplica a todos los elementos
Heredable no
Valores porcentuales no aplicable
Esta propiedad indica cuando un elemento es en lnea, como <em>, de bloque, como
<h1> o de lista, como <li>.
Estilo de Lista
Espacios en Blanco
78
Unidades
Unidades de Longitud
El formato de un valor de longitud es un signo opcional ('+' o '-', '+' por defecto), un
numero y una unidad de medida. Ejemplos: 12pt, 2em, 3mm.
pt: puntos
pc: picas
px: pixels
in: pulgadas
mm: milimetros
cm: centimetros
Los elementos hijo heredan los valores calculados y no los valores relativos. Por
ejemplo:
Unidades de Color
79
La lista de colores sugerida es: aqua, black, blue, fuchsia, gray,
green, maroon, navy, olive, purple, red, silver, teal,
white, yellow. Estos 16 colores se han tomado de la paleta VGA de Windows.
Tambin podemos utilizar la funcion rgb(). Usa tres argumentos: rojo, verde y azul.
Cada color puede ser un entero entre 0 y 255, o un porcentaje. Ejemplo:
80