Universidad de Mendoza Teleinformática I – Lenguaje HTML ¿Qué es WWW? El servicio Web o WWW es una forma de representar la información en Internet basada en páginas. Una página WWW puede incluir información de diversas formas: texto, gráficos, sonido, video, hipertexto. Un hipertexto es texto resaltado que el usuario puede activar para cargar otra página WWW. La diferencia entre un documento hipertexto y un documento normal consiste en que el hipertexto contiene, además de la información, una serie de enlaces o conexiones con otros documentos relacionados, de manera que el lector puede pasar de un tema a otro y volver al documento original en el momento en que le interese. Las principales ventajas del servicio WWW son tres. Primera, que puede combinar texto y multimedia. Segunda, que los hiperenlaces permiten cargar páginas de cualquier otro servidor conectado a Internet, da igual que esté localizado en Argentina o en Australia. Y, tercera, que la creación de páginas WWW es bastante sencilla mediante el lenguaje HTML. ¿Qué es HTML? El HTML, HyperText Markup Language, es un lenguaje simple utilizado para crear documentos de hipertexto para WWW. No es un lenguaje de descripción de página como Postcript; HTML no permite definir de forma estricta la apariencia de una página, aunque una utilización algo desviada hace que se utilice en ocasiones como un lenguaje de presentación. Además, la presentación de la página es muy dependiente del navegador utilizado: el mismo documento no produce el mismo resultado en la pantalla si se visualiza con un navegador en modo caracter, Internet Explorer o Netscape, o sea, el HTML se limita a describir la estructura y el contenido de un documento, y no el formato de la página y su apariencia. Una de las claves del éxito de WWW, aparte de lo atractivo de su presentación es sin duda, su organización y coherencia. Todos los documentos WWW comparten un mismo aspecto y una única interfaz, lo que facilita enormemente su manejo por parte de cualquier persona. Esto es posible porque el lenguaje HTML, en que están escritos los documentos, no solo permite establecer hiperenlaces entre diferentes documentos, sino que es un "lenguaje de descripción de página" independiente de la plataforma en que se utilice. Es decir un documento HTML contiene toda la información necesaria sobre su aspecto y su interacción con el usuario, y es luego el navegador que utilicemos el responsable de asegurar que el documento tenga un aspecto coherente, independientemente del tipo de estación de trabajo desde donde estemos efectuando la consulta. Su simplicidad es tal que no es necesario utilizar un editor particular. Su gran permisividad exige rigor y atención en la estructura de documentos con el fin de que éstos se visualicen correctamente al margen del contexto y el navegador utilizado. Por tanto, como hemos visto, HTML es un lenguaje muy sencillo que nos permite preparar documentos Web insertando en el texto de los mismos una serie de marcas (tags) que controlan los diferentes aspectos de la presentación y comportamiento de sus elementos. Para escribir HTML lo único que se necesita es un editor de texto ASCII, como el Bloc de notas de Windows o en VI de UNIX. Las marcas o tags que controlan el comportamiento del documento son fragmentos de texto encerrados entre los signos "mayor que" y "menor que" (<marca>). Existen diferentes tipos de marcas: algunas controlan simplemente la presentación del texto del documento; otras, la forma en que se incluirán en él imágenes; otras, finalmente, los hipervínculos. Para completar el conjunto de herramientas básicas necesarias para escribir páginas HTML debemos contar con un cliente WWW, tal como Internet Explorer, o Netscape, para probar el documento a medida que lo 1 Universidad de Mendoza Teleinformática I – Lenguaje HTML vamos desarrollando. Las marcas funcionan muchas veces por parejas, una para indicar el inicio de enlace o formato, y otra para señalar el final. La marca de inicio consiste en una letra o una palabra (por ejemplo, estas son marcas de inicio: <B>, <TITLE>). La marca de final es la misma letra o palabra precedida por la barra inclinada o "slash" (es decir,</B>, </TITLE>). Existen, no obstante, algunas marcas que no requieren su pareja de cierre, como <BR> (que fuerza un salto de línea). Es importante señalar que las marcas, en general pueden estar indistintamente en mayúsculas o en minúsculas. Escribiendo un documento HTML Un documento HTML comienza con la etiqueta <html>, y termina con </html>. Dentro del documento (entre las etiquetas de principio y fin de html), hay dos zonas bien diferenciadas: el encabezamiento, delimitado por <head> y </head>, que sirve para definir diversos valores válidos en todo el documento; y el cuerpo, delimitado por <body> y </body>, donde reside la información del documento. La información almacenada en el encabezamiento no se muestra por pantalla, la única utilidad del encabezamiento en la que nos detendremos es la directiva <title>, que permite especificar el título de un documento HTML. Este título no forma parte del documento en sí: no aparece, por ejemplo, al principio del documento una vez que este se presenta con un programa adecuado, sino que suele servir como título de la ventana del programa que nos la muestra. Elementos y Atributos Elementos: La declaración de elementos en HTML por lo general está compuesta por 3 partes: Tag de inicio Contenido Tag de cierre El nombre del elemento se escribe en el tag de inicio (con el formato <elemento>) y en el tag de finalización (con el formato </elemento>). Existen algunos elementos que pueden omitir el tag de inicio o el tag de finalización. Pueden existir elementos anidados dentro de un documento, en este caso el pirmer tag de finalización cierra al último tag que se abrió el segundo al penúltimo y así sucesivamente. Atributos: Los elementos pueden tener propiedades asociadas, esas propiedades las llamamos atributos, algunos de ellos pueden tener valores y otros pueden ir sin valores. Los atributos se colocan en el tag de inicio a continuación del nombre del elemento y se separan entre ellos con espacios, en el caso de tener valores a continuación se coloca el signo igual (=) y entre comillas simples o dobles el valor. Se pueden asignar valores sin las comillas, pero no es una práctica muy recomendada. No es obligatorio definir todos los atributos en la definición de un elemento. Secciones General (Todos los documentos HTML deberían contener estos elementos) Tipo de documento 2 Universidad de Mendoza Teleinformática I – Lenguaje HTML <HTML></HTML> (Al principio y fin del documento) Cabecera de página <HEAD></HEAD> (Información descriptiva, tal como el título) Titulo de página <TITLE></TITLE> (Debe ir en el encabezado) Cuerpo de la página <BODY></BODY> (Cuerpo de la página) Definición estructural (Apariencia controlada por las preferencias del navegador) Encabezados <H?></H?> (Las especificaciones definen 6 niveles) Alineación <H? ALIGN=LEFT|CENTER|RIGHT></H?> División <DIV></DIV> Alineación <DIV ALIGN=LEFT|RIGHT|CENTER|JUSTIFY></DIV> Contenido definido (4.0) <SPAN></SPAN> Enfasis <EM></EM> (Se muestra usualmente como itálico) Enfasis fuerte <STRONG></STRONG> (Se muestra usualmente como negrita) Citación <CITE></CITE> (Se muestra usualmente como itálico) Código fuente <CODE></CODE> (Para listar código fuente) Ejemplo de salida <SAMP></SAMP> Entrada de teclado <KBD></KBD> Variable <VAR></VAR> Definición <DFN></DFN> Dirección del autor <ADDRESS></ADDRESS> Letras de tamaño grande <BIG></BIG> Letras de tamaño pequeña <SMALL></SMALL> Inserciones (4.0) <INS></INS> (Marca agregado en una nueva versión) <INS DATETIME=":::"></INS> (Fecha de cambios) <INS CITE="URL"></INS> (Puede ser usado para indicar una dirección que explique cambios) Borrado (4.0) <DEL></DEL> (Marca borrado en una nueva versión) El resto se aplica igual que en Inserciones 3 Universidad de Mendoza Teleinformática I – Lenguaje HTML Acrónimo (4.0) <ACRONYM></ACRONYM> Abreviado (4.0) <ABBR></ABBR> Formato de presentación (el autor especifica la apariencia del texto) Negrita <B></B> Itálico <I></I> Subrayado (4.0) <U></U> (no muy utilizado) Linea al medio <STRIKE></STRIKE> (no muy utilizado) Linea al medio (4.0) <S></S> (no muy utilizado) Subíndice <SUB></SUB> Superíndice <SUP></SUP> Máquina de escribir <TT></TT> (se muestra con fuente mono espacio) Preformato <PRE></PRE> (muestra el texto tal cual es) Ancho <PRE WIDTH=?></PRE> (en caracteres) Centrado <CENTER></CENTER> (tanto para texto como para imágenes) Parpadeo <BLINK></BLINK> Fuentes Tamaño <FONT SIZE=?></FONT> (varía desde 1 a 7) Cambio del tamaño del carácter <FONT SIZE="+|-?"></FONT> Color <FONT COLOR="#$$$$$$"></FONT> Tipo de fuente (4.0) <FONT FACE="***"></FONT> Tamaño de punto (Netscape 4) <FONT POINT-SIZE=?></FONT> Peso (Netscape 4) <FONT WEIGHT=?></FONT> Tamaño de fuente base (4.0) <BASEFONT SIZE=?> (desde 1 a 7; por defecto es 3) Marquesina (Internet Explorer) <MARQUEE></MARQUEE> Posicionamiento 4 Universidad de Mendoza Teleinformática I – Lenguaje HTML Multiple columna (Netscape 3) <MULTICOL COLS=?></MULTICOL> Separación de columna (Netscape 3) <MULTICOL GUTTER=?></MULTICOL> Ancho de columna (Netscape 3) <MULTICOL WIDTH=?></MULTICOL> Capas (Netscape 4) Capa <LAYER></LAYER> Nombre <LAYER ID="***"></LAYER> Ubicación <LAYER LEFT=? TOP=?></LAYER> Ubicación relativa <LAYER PAGEX=? PAGEY=?></LAYER> Archivo orígen <LAYER SRC="***"></LAYER> Apilamiento <LAYER Z-INDEX=?></LAYER> Ubicación en la pila <LAYER ABOVE="***" BELOW="***"></LAYER> Dimensión <LAYER HEIGHT=? WIDTH=?></LAYER> Camino de recorte <LAYER CLIP=,,,></LAYER> Visibilidad <LAYER VISIBILITY=SHOW|HIDDEN|INHERIT></LAYER> Fondo <LAYER BACKGROUND="$$$$$$"></LAYER> Color <LAYER BGCOLOR="$$$$$$"></LAYER> Capa inmediata <ILAYER></ILAYER> (Acepta los mismo atributos que LAYER) Contenido alternativo <NOLAYER></NOLAYER> Vínculos, gráficos y sonidos Vincular URI <A HREF="URL"></A> Vincular una localización en particular <A HREF="URL#***"></A> (Si se encuentra en otro documento) <A HREF="#***"></A> (Si se encuentra en el mismo documento) Ventana destino (4.0) <A HREF="URL" TARGET="***"></A> Acciones haciendo click (4.0) <A HREF="URL" ONCLICK="***"></A> (Javascript) Acciones de Mouse arriba de (4.0) <A HREF="URL" ONMOUSEOVER="***"></A> (Javascript) Acciones de Mouse saliendo (4.0) <A HREF="URL" ONMOUSEOUT="***"></A> (Javascript) 5 Universidad de Mendoza Teleinformática I – Lenguaje HTML Email Vincular un e-mail <A HREF="mailto:@"></A> Especificar subject <A HREF="mailto:@?SUBJECT=***"></A> (use a real ?) Definir localización (ancla) <A NAME="***"></A> Imágenes Mostrar imagen <IMG SRC="URL"> Alineación <IMG SRC="URL" ALIGN=TOP|BOTTOM|MIDDLE|LEFT|RIGHT> Alineación (Netscape 1) <IMG SRC="URL" ALIGN=TEXTTOP|ABSMIDDLE| BASELINE|ABSBOTTOM> Alternativa de presentación <IMG SRC="URL" ALT="***"> (si no se puede mostrar la imagen) Dimensiones <IMG SRC="URL" WIDTH=? HEIGHT=?> (en pixels) <IMG SRC="URL" WIDTH=% HEIGHT=%> (como porcentaje) Borde <IMG SRC="URL" BORDER=?> (en pixels) Mapas sobre imágenes <IMG SRC="URL" ISMAP> (requiere un script) <IMG SRC="URL" USEMAP="URL"> Mapas del lado del cliente <MAP NAME="***"></MAP> (describe al mapa) Sección del mapa <AREA SHAPE="DEFAULT|RECT|CIRCLE|POLY" COORDS=",,," HREF="URL"|NOHREF> Clip de video (Internet explorer <IMG DYNSRC="***" START="***" LOOP=?> Sonido de fondo (Internet explorer) <BGSOUND SRC="***" LOOP=?|INFINITE> Objeto embebido (Netscape 2) <EMBED SRC="URL"> (inserta un objeto en la página) Tamaño de objeto <EMBED SRC="URL" WIDTH=? HEIGHT=?> Objeto (4.0) <OBJECT></OBJECT> Parámetros de objetos (4.0) <PARAM> Divisores Párrafos <P></P> (El tag de cerrado es generalmente innecesario) Alineación <P ALIGN=LEFT|CENTER|RIGHT></P> 6 Universidad de Mendoza Teleinformática I – Lenguaje HTML Texto justificado <P ALIGN=JUSTIFY></P> Corte de línea <BR> (retorno de carro simple) Regla horizontal <HR> Alineación <HR ALIGN=LEFT|RIGHT|CENTER> Grosor <HR SIZE=?> (en pixels) Ancho <HR WIDTH=?> (en pixels) Ancho en porcentajes <HR WIDTH="%"> (como porcentaje del ancho de la página) Linea sólida <HR NOSHADE> (sin el efecto 3D) Sin cortes de líneas (Netscape 1) <NOBR></NOBR> (previene el corte de lineas) Listas (pueden anidarse entre si) Lista sin órden <UL><LI></UL> (<LI> antes de cada item de la lista) Compacta <UL COMPACT></UL> Tipo de viñeta <UL TYPE=DISC|CIRCLE|SQUARE> (para la lista entera) <LI TYPE=DISC|CIRCLE|SQUARE> (para este y los subsecuentes) Lista ordenada <OL><LI></OL> (<LI> antes de cada item de la lista) Compacta <UL COMPACT></UL> Tipo de numeración <OL TYPE=A|a|I|i|1> (para la lista entera) <LI TYPE=A|a|I|i|1> (para este y los subsecuentes) Numero de inicio <OL START=?> (para la lista entera) <LI VALUE=?> (para este y los subsecuentes) Lista de definición <DL><DT><DD></DL> (<DT> = término, <DD> = definición) Compacta <UL COMPACT></UL> Lista de menú <MENU><LI></MENU> (<LI> antes de cada item de la lista) Compacta <MENU COMPACT></MENU> Lista de directorio <DIR><LI></DIR> (<LI> antes de cada item de la lista) Compacta <DIR COMPACT></DIR> 7 Universidad de Mendoza Teleinformática I – Lenguaje HTML Fondo de pantalla y colores Fondo azulejado <BODY BACKGROUND="URL"> Marca de agua (Internet Explorer) <BODY BGPROPERTIES="FIXED"> Color de fondo <BODY BGCOLOR="#$$$$$$"> (el orden es rojo, verde y azul) Color de texto <BODY TEXT="#$$$$$$"> Color de vínculos <BODY LINK="#$$$$$$"> Color de vínculos visitados <BODY VLINK="#$$$$$$"> Color de vínculos activos <BODY ALINK="#$$$$$$"> Caracteres especiales Carácter especial < > & " Marca registrada Marca registrada Copyright Copyright Espacio &nbsp; &#?; &lt; &gt; &amp; &quot; &#174; &reg; &#169; &copy; (donde ? es el código ISO 8859-1) Información completa: Lista completa en <http://www.uni-passau.de/%7Eramsch/iso8859-1.html> Formularios (generalmente requiere un script en el servidor) Un formulario es una parte del documento que contiene elementos comunes y además contiene elementos especiales llamados controles, y, opcionalmente sus etiquetas. Los usuarios generalmente completan o modifican los valores de los controles de un formulario para luego enviárselo a un agente capaz de procesar esa información (WEB server, mail server, etc.). En la declaración de un formulario hay un atributo que indica a que URL se le va a enviar los datos (atributo ACTION), y solo puede ser enviado a través de un botón especial (tipo de botón SUBMIT). En HTML un documento puede contener mas de un formulario a la vez, pero solo se enviará la información del formulario al cual se le presiona el botón SUBMIT. Definición de formulario <FORM ACTION="URL" METHOD=GET|POST></FORM> Subir archivos (4.0) <FORM ENCTYPE="multipart/form-data"></FORM> Campo de entrada de datos <INPUT TYPE="TEXT| PASSWORD| CHECKBOX| RADIO| FILE| BUTTON| IMAGE| HIDDEN| SUBMIT| RESET"> 8 Universidad de Mendoza Teleinformática I – Lenguaje HTML Nombre del campo <INPUT NAME="***"> Valor del campo <INPUT VALUE="***"> Marcado? <INPUT CHECKED> (checkboxes y radio boxes) Tamaño del campo <INPUT SIZE=?> (en caracteres) Largo máximo <INPUT MAXLENGTH=?> (en caracteres) Botón <BUTTON></BUTTON> Nombre (4.0) <BUTTON NAME="***"></BUTTON> Tipo de botón (4.0) <BUTTON TYPE="SUBMIT|RESET|BUTTON"></BUTTON> Valor por defecto <BUTTON VALUE="***"></BUTTON> Etiquetas (4.0) <LABEL></LABEL> Elemento etiquetado (4.0) <LABEL FOR="***"></LABEL> Lista de selección <SELECT></SELECT> Nombre de la lista <SELECT NAME="***"></SELECT> Número de opciones <SELECT SIZE=?></SELECT> Selección múltiple <SELECT MULTIPLE> (se puede seleccionar mas de uno) Opción (de las listas desplegables) <OPTION> (items que se pueden seleccionar) Opción por defecto <OPTION SELECTED> Valor de la opción <OPTION VALUE="***"> Grupo de opciones (4.0) <OPTGROUP LABEL="***"></OPTGROUP> Área de texto Tamaño <TEXTAREA ROWS=? COLS=?></TEXTAREA> Nombre <TEXTAREA NAME="***"></TEXTAREA> Grupo de elementos <FIELDSET></FIELDSET> Leyenda (4.0) <LEGEND></LEGEND> (texto para grupo de elementos) Alineación <LEGEND ALIGN="TOP|BOTTOM|LEFT|RIGHT"></LEGEND> 9 Universidad de Mendoza Teleinformática I – Lenguaje HTML Tablas Definición de tablas <TABLE></TABLE> Alineación de la tabla (4.0) <TABLE ALIGN=LEFT|RIGHT|CENTER> Bordes <TABLE BORDER></TABLE> (activado o desactivado) <TABLE BORDER=?></TABLE> (asignar valor) Espacio entre celda y tabla <TABLE CELLSPACING=?> Espacio entre celda y texto <TABLE CELLPADDING=?> Ancho de tabla <TABLE WIDTH=?> (en pixels) Ancho en porcentaje <TABLE WIDTH=%> (porcentaje de la página) Color de tabla (4.0) <TABLE BGCOLOR="$$$$$$"></TABLE> Contorno de la tabla (4.0) <TABLE FRAME=VOID|ABOVE|BELOW|HSIDES|LHS|RHS| VSIDES|BOX|BORDER></TABLE> Reglas (4.0) <TABLE RULES=NONE|GROUPS|ROWS|COLS|ALL></TABLE> Color de borde (Internet explorer) <TABLE BORDERCOLOR="$$$$$$"></TABLE> Borde oscuro (Internet Explorer) <TABLE BORDERCOLORDARK="$$$$$$"></TABLE> Borde claro (Internet Explorer) <TABLE BORDERCOLORLIGHT="$$$$$$"></TABLE> Fila <TR></TR> Alineación <TR ALIGN=LEFT|RIGHT|CENTER VALIGN=TOP|MIDDLE|BOTTOM> Celda <TD></TD> (deben aparecer dentro de una fila) Alineación <TD ALIGN=LEFT|RIGHT|CENTER VALIGN=TOP|MIDDLE|BOTTOM> Sin corte de línea <TD NOWRAP> Columnas a unir <TD COLSPAN=?> Filas a unir <TD ROWSPAN=?> Ancho deseado (4.0) <TD WIDTH=?> (en pixels) Porcentaje de ancho (Netscape 3) <TD WIDTH="%"> (porcentaje de la tabla) Color de celda (4.0) <TD BGCOLOR="#$$$$$$"> Celdas de encabezado 10 Universidad de Mendoza Teleinformática I – Lenguaje HTML <TH></TH> (es igual que TD pero el texto es negrita y centrado) Alineación <TH ALIGN=LEFT|RIGHT|CENTER VALIGN=TOP|MIDDLE|BOTTOM> Sin corte de línea <TH NOWRAP> Columnas a unir <TH COLSPAN=?> Filas a unir <TH ROWSPAN=?> Ancho deseado (4.0) <TH WIDTH=?> (en pixels) Porcentaje de ancho <TH WIDTH="%"> (porcentaje de la tabla) Color de celda <TH BGCOLOR="#$$$$$$"> Cuerpo de tabla <TBODY> Pie de tabla (4.0) <TFOOT></TFOOT> (debe venir antes de THEAD> Encabezado de tabla (4.0) <THEAD></THEAD> Caption de la tabla <CAPTION></CAPTION> Alineación <CAPTION ALIGN=TOP|BOTTOM|LEFT|RIGHT> Columna (4.0) <COL></COL> (atributos de grupo de columnas) Columnas unidas (4.0) <COL SPAN=?></COL> Ancho de columna (4.0) <COL WIDTH=?></COL> Porcentaje de ancho (4.0) <COL WIDTH="%"></COL> Grupo de columnas (4.0) <COLGROUP></COLGROUP> (estructura de grupo de columnas) Columnas agrupadas (4.0) <COLGROUP SPAN=?></COLGROUP> Ancho de grupo <COLGROUP WIDTH=?></COLGROUP> Porcentaje de ancho <COLGROUP WIDTH="%"></COLGROUP> Marcos (Frames). Define y manipula regiones especificas de la pantalla Documento frame (4.0) <FRAMESET></FRAMESET> (en vez de <BODY>) Alto de filas (4.0) <FRAMESET ROWS=,,,></FRAMESET> (pixels o %) <FRAMESET ROWS=*></FRAMESET> (* = tamaño relativo) Ancho de columnas (4.0) <FRAMESET COLS=,,,></FRAMESET> (pixels o %) 11 Universidad de Mendoza Teleinformática I – Lenguaje HTML <FRAMESET COLS=*></FRAMESET> (* = tamaño relativo) Bordes (4.0) <FRAMESET FRAMEBORDER="yes|no"></FRAMESET> Ancho <FRAMESET BORDER=?></FRAMESET> Color <FRAMESET BORDERCOLOR="#$$$$$$"></FRAMESET> Espacio entre frames (Netscape 3) <FRAMESET FRAMESPACING=?></FRAMESET> Definición del frame (4.0) <FRAME> (contiene un frame individual) Mostrar documento (4.0) <FRAME SRC="URL"> Nombre (4.0) <FRAME NAME="***"|_blank|_self|_parent|_top> Ancho de margen (4.0) <FRAME MARGINWIDTH=?> (márgenes izquierdo y derecho) Alto de margen (4.0) <FRAME MARGINHEIGHT=?> (márgenes superior e inferior) Barras de desplazamiento? (4.0) <FRAME SCROLLING="YES|NO|AUTO"> No modificar el tamaño del frame (4.0) <FRAME NORESIZE> Bordes (4.0) <FRAME FRAMEBORDER="yes|no"> Color de bordes (4.0) <FRAME BORDERCOLOR="#$$$$$$"> Contenidos sin frame <NOFRAMES></NOFRAMES> (para navegadores sin frames) Frames inmediatos (4.0) <IFRAME></IFRAME> (tiene los mismos atributos que FRAME) Dimensiones <IFRAME WIDTH=? HEIGHT=?></IFRAME> <IFRAME WIDTH="%" HEIGHT="%"></IFRAME> Scripts y Java Script <SCRIPT></SCRIPT> Ubicación <SCRIPT SRC="URL"></SCRIPT> Tipo <SCRIPT TYPE="***"></SCRIPT> Lenguaje <SCRIPT LANGUAGE="***"></SCRIPT> Otro contenido (4.0) <NOSCRIPT></NOSCRIPT> (si los scripts no son soportados) Applet <APPLET></APPLET> Nombre de archivo <APPLET CODE="***"> 12 Universidad de Mendoza Teleinformática I – Lenguaje HTML Parámetros <APPLET PARAM NAME="***"> Ubicación <APPLET CODEBASE="URL"> Identificación <APPLET NAME="***"> (para referencias) Texto altenativo <APPLET ALT="***"> (para navegadores no Java) Alineación <APPLET ALIGN="LEFT|RIGHT|CENTER"> Tamaño <APPLET WIDTH=? HEIGHT=?> (en pixels) Espaciado <APPLET HSPACE=? VSPACE=?> (en pixels) Scripts en el servidor (Netscape 4) <SERVER></SERVER> Misceláneos Comentarios <!-- *** --> (el navegador no lo muestra) Prólogo <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"> Dirección URL de este archivo <BASE HREF="URL"> (debe incluirse en el header) Nombre base de la ventana <BASE TARGET="***">( debe incluirse en el header) Relaciones <LINK REV="***" REL="***" HREF="URL"> (en el header) Archivo vinculado (4.0) <LINK TYPE="***" SRC="***"></LINK> Información Meta <META> (debe incluirse en el header) Hojas de estilos <STYLE></STYLE> HTML - Tabla Cronológica 13 1986. Publicación de la ISO 8879 que presenta el Standard General Markup Language, origen del HTML. 1989. Tim Berners-Lee, a la sazón en el Centro Europeo de Investigaciones Nucleares presenta su artículo Information Management: A Proposal dedicándose de lleno al desarrollo de un sistema que permitiera el acceso en línea de manera uniforme a la información disponible en muchos recursos distintos, y que pudiese funcionar en máquinas que conectadas por redes basadas en TCP/IP. 1990-1991. Tim Berners-Lee define el HTML como un subconjunto de SGML (Standard Generalized Markup Language), que más tarde se llamará nivel 0; soporta encabezados, listas y anclas. Se crea el nombre World Wide Web. Universidad de Mendoza Teleinformática I – Lenguaje HTML 14 1991. Tim Berners-Lee introduce el primer visor de HTML, LineMode, que trabaja en modo texto y sólo en plataformas UNIX. El Centro Europeo de Investigaciones Nucleares realiza la apertura del primer sitio con acceso público de World Wide Web el 17 de mayo (http://info.cern.ch). 1992. Dan Connolly produce la primera Definición de Tipo de Documento (DTD) para el lenguaje, llamada HTML 1.0, agregando a la definición original atributos para modificar el estilo físico del texto. Se distribuye Viola, primer visor gráfico de Web y disponible sólo para X.11. 1993. Un nuevo visor que soporta un mayor nivel, Lynx, es producido por la Universidad de Kansas, si bien lee sólo texto. Aparece Mosaic, desarrollado por el Centro Nacional para Aplicaciones de Supercomputadoras, es el primer visor de Web en entorno gráfico que se hace disponible para computadoras personales, lo que lo hace inmediatamente popular. A fines de año, comienzan a aparecer los primeros artículos sobre WWW en diarios y revistas de circulación masiva. Tim Berners-Lee utiliza el trabajo del año anterior de Connolly para presentar el borrador de la primera norma (RFC -Recommendation for Comments) de HTML para Internet. 1994. La Universidad Técnica de Graz desarrolla un servidor y clientes con mayores prestaciones para HTML, Hyper-G, que no tiene gran éxito. Cello, primer visor de HTML que no requiere TCP/IP presentado por la Escuela de Leyes de la Universidad de Cornell. Dan Connolly y Karen Olson Muldrow redefinen el HTML para el nivel 2.0, que ahora soporta formularios. Un grupo de programadores que desarrollaran el Mosaic producen un nuevo visor de World Wide Web, Netscape (también conocido como Mozilla), que tiene una amplia aceptación entre los usuarios, pero que soporta elementos de programación que equivalen a una degeneración del HTML (tamaños de letra, fondos). Se define un equivalente para los modelos en tres dimensiones del HTML, el VRML (Virtual Reality Modeling Language), que permite moverse dentro de los ambientes definidos. En este mismo año se realizan la Primera y Segunda conferencias internacionales de WWW, en Ginebra y Chicago, respectivamente. Se crea la W3 Organization. 1995. Dave S. Raggett (Hewlett-Packard, Inglaterra) comienza a compilar la normativa del nuevo nivel del lenguaje, el HTML 3.0, cuya principal novedad es el soporte de tablas. Microsoft produce su primer visor de Internet, el cual también utiliza elementos de HTML degenerados. Una nueva versión de Netscape, Navigator 2.0, agrega soporte de encuadres. Sun Microsystems produce el primer visor de World Wide Web con soporte de un lenguaje de programación, HotJava. Se celebran la Tercera y Cuarta conferencias internacionales de WWW, en Boston y Darmstadt respectivamente, y la conferencia de WWW para Asia y el Pacífico en Wagga-Wagga.. 1996. Netscape Communications y Microsoft presentan las nuevas versiones de sus visores que soportan gran parte del nivel de HTML 3.0. Aparecen visores no comerciales que implementan la norma completa de HTML 3.0. Se formaliza un nuevo nivel para la modelación en tres dimensiones, VRML 3.0, que permite interactuar con los objetos definidos. Se celebra la Quinta conferencia internacional de WWW en Rocquencourt. 1997. D. Raggett presenta, en enero, la versión normalizada del 3.2. En julio, aparece la versión 4.0, experimental. 1998. HTML 4.0. Universidad de Mendoza Teleinformática I – Lenguaje PHP ¿Que es PHP? Es un lenguaje de scripts embebido dentro del lenguaje HTML. PHP fue creado por Rasmus Lerdorf en 1994 con la idea de mejorar las prestaciones que hasta ese momento brindaba la WWW, en un comienzo se lo llamaba Personal Home Pages Tools. En un principio era un lenguaje muy limitado y solo parseaba unos cuantos macros, y funciones básicas. Posteriormente le agrego un interprete y así surgió el PHP FI versión 2 (tenía soporte para la base de datos mSQL). Luego Zeev Suraski y Andi Gutmans se unieron al equipo y re escribieron el parser surgiendo la versión 3. La Ultima versión (la 4) cuenta con el motor de de scripts de Zend, haciéndolo más potente y rápido. Tipo de lenguaje Interpretado o compilado Scripts del lado del cliente o del servidor Orientado a objetos o no orientado a objetos Principales características del lenguaje del Lenguaje Permite hacer debug (con productos comerciales). Se puede compilar a código intermedio (con productos comerciales), lo que lo hace más rápido e inviolable. No permite que el usuario final pueda ver el código fuente una vez ejecutada la aplicación, pero el código fuente queda en el servidor, por lo que el administrador del sistema si tiene acceso. Se puede utilizar con clientes livianos y universales. Las actualizaciones en el sistema quedan a disposición automáticamente para todos los usuarios. Soporte para múltiples bases de datos (aproximadamente 21). Se puede instalar en múltiples plataformas (Unix, Linux, OS/2, Windows). Esta muy bien amalgamado con Apache. Alta curva de aprendizaje del lenguaje, sobre todo para los programadores del lenguaje C. Es de libre distribución. Ampliamente conocido. Gran cantidad de funciones, lo que lo hace muy potente. Soporta orientación a objetos. Como se instala en apache Primero se instala apache –la instalación depende de la plataforma donde se lo instales -, luego se deben modificar los siguientes parámetros del archivo httpd.conf ServerRoot "C:/Archivos de programa/Apache Group/Apache" Donde esta instalado el servidor. ServerName localhost Nombre del server. DocumentRoot "C:/Archivos …. /Apache/htdocs" Directorio principal de archivos. DirectoryIndex index.html Archivo por defecto del servidor. Una vez que se haya modificado los datos se agrega el soporte para PHP ScriptAlias /php/ "C:/Archivos de programa/Apache Group/php/" Action php3-script /php/php.exe AddHandler php3-script .php3 .html .htm .phtml Entorno de desarrollo, ejecución, server y debugger Desarrollo: Editor común o editor de html (FrontPage, GoLive, HomeSite) 15 Universidad de Mendoza Teleinformática I – Lenguaje PHP Ejecucion: Cliente de HTML (Netscape, Internet Explorer) Server: IIS, apache Debugger: www.zend.com Como se agregan scripts de PHP en HTML Formas de incluir codigo PHP: <script languaje="PHP"> ......... </script> <?PHP ..... ?> Esta es la forma estandar <? ..... ?> Pautas generales del PHP comentarios de una línea y de varias // comentarios de una línea /* comentario de varias líneas */ Fin de sentencias Pueden haber casos en que una sentencia con texto tenga varios renglones la delimitación debe hacerse entre comillas y luego finalizar con ; ; fin de líneas Salida por pantalla echo variable; echo “string”; 16 Universidad de Mendoza Teleinformática I – Tipos de datos primitivos Tipos de datos Primitivos ¿Cómo son las variables en PHP? Las variables se definen con el signo $ adelante del nombre de la variable, por ejemplo: $variable = 1; El nombre de variables puede tener cualquier largo y debe comenzar con una letra o el guión bajo (underscore), seguido de cualquier letra de la a-z o A-Z, guión bajo, carácter ascii desde 127 a 255, o un número. Las variables son case sensitive. Tipos de datos primitivos Números enteros (integer) La definición de los números enteros depende de la plataforma donde se ejecuta el interprete PHP, generalmente es un número de 32 bits con signo. Formas de declarar números enteros: $numero = 100; $numero = -100; $numero = o100; $numero = 0x100; // número 100 positivo // número 100 negativo //64 en decimal (octal 100) //256 en decimal (hexadecimal 100) Números flotantes (double) El tamaño de los números flotantes depende de la plataforma en que se ejecuta el PHP pero por lo general el número máximo aproximado es 1.8e208 con una precisión de 14 cifras decimales (64 bits) La forma de definir los números flotantes son: $numero = 1.234; $número = 1.2e3; Hay que tener en cuenta que algunos números no pueden ser convertidos a números binarios sin evitar la perdida de precisión y esa perdida de precisión puede generar errores no esperados. Cadenas (strings) Los strings pueden ser definidos por dos tipos de delimitadores: Comilla doble: $cadena = “esta es una cadena”; Comilla simple: $cadena = ‘esta es una cadena’; Las variables que están entre comillas dobles son evaluadas (sujeto a ciertas restricciones), el símbolo de escape que se utiliza es la barra invertida “\”. Los caracteres que se permiten escapar son los siguientes: \n Retorno de carro \r Avance de línea \t Tabulador \\ barra invertida \ 1 Universidad de Mendoza Teleinformática I – Tipos de datos primitivos \$ \” signo $ comillas dobles En el caso de la definición de strings con comillas simples, no se evalúan las variables y los únicos caracteres que se pueden escapar son los siguientes \’ y \\ Existe otra forma de delimitar strings que es el uso de la sintaxis “here doc”. La forma en que se define es la siguiente: "«<" más un identificador proporcionado por nosotros, al finalizar se termina con el mismo delimitador y ;. Por ejemplo: $str = «<CADENA Hola, buenos dias CADENA; El comportamiento de la sintaxis “here doc” es similar a la definición de string con comillas dobles. Los strings se concatenan con el punto (.), no con el más (+). Los caracteres dentro de un string pueden ser accedidos tratándolos como un arreglo indexado numéricamente. Conversión de strings $numero = 1 + ”2” ; $numero = 1 + “1.1e3”; $numero = 1 + “texto + 1”; $numero = 1 + “texto”; $numero = 1 + “10 años”; $numero = “10 años” + 1 ; $numero = “10 años” + 1.0 ; // igual a 3 // igual a 1101 // igual a 1 // igual a 1 // igual a 11 // igual a 11 // igual a 11 Comportamiento de variables (Type Juggling) PHP no requiere ni soporta definición explícita en la declaración de variables. El tipo de variable depende del contexto en el que se la usa. Si se le asigna a una variable un número entero entonces esa variable tendrá el tipo entero, pero si se le asigna a continuación a la misma variable un string entonces dejara de ser un entero para ser un string. Ejemplos de cambios de variables $variable = “0”; $variable++; $variable = $variable + 1; $variable = $variable + 1.3; $variable = 1 + “10 años”; es un string (“0”) es un string (“1”) es un entero (2) es un flotante (3.3) es un entero (11) Forzado de variables (Type Casting) El forzado de variables consiste en forzar un tipo dado de una variable, independientemente de la 2 Universidad de Mendoza Teleinformática I – Tipos de datos primitivos operación que se esté realizando. Para realizar el forzado de variables se indica entre paréntesis el tipo antes de la variable. El siguiente ejemplo fuerza una variable para que sea un número flotante: $entero = 200; $flotante = (int) $entero; Los tipos válidos de forzados son los siguientes: (int), (integer) – fuerza a entero (real), (float), (double) – fuerza a double (string) – fuerza a string (array) – fuerza a arreglo (object) – fuerza a objeto Cuando se fuerza una variable a un objeto la variable quedará almacenada en el atributo “scalar” del objeto, cuando se transforma a arreglo el valor será el primer elemento del arreglo. 3 Universidad de Mendoza Teleinformática I - Variables Variables Fundamentos Las variables se definen con el signo $ adelante del nombre de la variable, por ejemplo: $variable = 1; El nombre de variables puede tener cualquier largo y debe comenzar con una letra o el guión bajo (underscore), seguido de cualquier letra de la a-z o A-Z, guión bajo, carácter ascii desde 127 a 255, o un número. Las variables son case sensitive. Asignación de variables En la versión 3 de PHP se asignan las variables solamente por valor, esto quiere decir que si asigno una variable por valor $a=4; $b=$a; $b=5; al cambiar el valor de alguna de las dos variable no va a afectar a la otra. PHP 4 ofrece otro modo de asignar variables, este modo se llama asignación de variables por referencia. De esta forma la nueva variable hace referencia a la variable vieja, en otras palabras se convierte en un “alias de” o “apunta a” la otra variable. Cualquier cambio que haga a cualquiera de las dos variables, va a repercutir en la otra. El modo de asignar variables por referencia es anteponer el carácter & a la variable cuando se está haciendo la asignación. $b=&$a; Algo importante de destacar es que solo se puede asignar variables por referencia a variables declaradas, no se puede hacer sobre funciones, ni asignaciones de números u operaciones matemáticas. $variable = &(45+3); Incorrecto $variable = &5; Incorrecto $variable = &funcion(); Incorrecto Variables predefinidas PHP nos proporciona una gran cantidad de variables predefinidas, pero hay que tener en cuenta que existen algunas variables que dependen del entorno donde se ejecuta el PHP. Variables de Apache Estas variables son creadas por el servidor web Apache, si se utiliza un servidor web distinto al apache no hay garantía de que estas variables estén disponibles, puede que algunas no existan o que hayan otras nuevas. SERVER_NAME: es el nombre del host donde se está ejecutando el script de PHP. Si el script se está ejecutando en un host virtual, será el nombre del servidor virtual. SERVER_PROTOCOL: Es el nombre y la versión del protocolo con el cual se requirió la página por ejemplo ’HTTP/1.0’ REQUEST_METHOD: Cual fue el método con el que se accedió la página, por ejemplo ’GET’, ’HEAD’, ’POST’, ’PUT’. HTTP_REFERER: La dirección de la página – si existiera- de la cual fue referida la página 1 Universidad de Mendoza Teleinformática I - Variables actual en el navegador, esta se coloca por el navegador del usuario, no todos los navegadores lo hacen. REMOTE_ADDR: es la dirección IP desde donde se está viendo la página actual. REMOTE_PORT: es el puerto IP desde donde se está viendo la página actual. SERVER_PORT: el puerto IP que utiliza el servidor WEB REQUEST_URI: es la URI que fue dado para poder acceder a la página actual por ejemplo ’/index.html’. Variables de entorno Estas variables se importan al espacio de nombres global del PHP desde el ambiente donde se ejecuta el parser de PHP. Muchas de ellas son provistas por el shell donde se está ejecutando el PHP, como existen diferentes tipos de shell es prácticamente imposible listar las variables de entorno. Variables de PHP Estas variables son creadas por el mismo PHP. argv: Es un arreglo de argumentos que han sido pasados al script. cuando se llama al PHP desde la linea de comandos, nos da un estilo similar al C para acceder a los datos pasados al script. Cuando se lo llama a través del método GET, este contendrá el string de petición. argc: si se lo ejecuta desde la linea de comandos, contendrá el número de parámetros que se le enviaron al script. PHP_SELF: Indica el nombre del script que se está ejecutando actualmente, se presenta en forma relativa al documento raíz, si se esta ejecutando desde la linea de comandos la variable no está disponible. HTTP_COOKIE_VARS: es un arreglo asociativo de variables pasado al script actual a través de cookies HTTP. HTTP_GET_VARS: es un arreglo asociativo de variables pasado as script actual a través del método HTTP GET. HTTP_POST_VARS: es un arreglo asociativo de variables pasado as script actual a través del método HTTP POST. HTTP_POST_FILES: es un arreglo asociativo de variables que contiene información a cerca de archivos subidos al servidor a través del método HTTP_POST HTTP_ENV_VARS: es un arreglo asociativo de variables pasadas al script actual a traves del entorno pariente HTTP_SERVER_VARS: es un arreglo asociativo de variables pasado as script actual a través del servidor HTTP, estas variables son análogas a las variables de entorno previamente mencionado. Ambito de las variables El ámbito de las variables está determinado por el contexto donde se han definido. La mayor parte de las variables tienen un ámbito simple. Este ámbito simple también abarca a los archivos incluidos y requeridos. $var = 1; include(“archivo.php3”); Function probar() { echo $var; 2 Universidad de Mendoza Teleinformática I - Variables } probar(); echo $var; En este script se define la variable $var, a diferencia del lenguaje C – donde las variables globales están disponibles dentro de las funciones- la variable $var no estará disponible dentro de la función probar(), la función hace referencia a la variable $var que es local a la función, para hacer que las variables globales se puedan acceder desde adentro de una función se deberá hacer lo siguiente: Function probar() { global $var; $var = 4; } echo $var; global //el resultado por pantalla va a ser 4 ya que se hicieron cambios sobre la variable Otra forma de acceder a las variables globales dentro de una función es: Function probar() { echo $GLOBALS[“var”]; } La variable $GLOBALS es un arreglo asociativo cuyas claves son los nombres de las variables globales. Cuando se crean las variables dentro de un ámbito se asigna una porción de la memoria del sistema para almacenar el valor de la misma, al abandonar o salir de ese ámbito la variable se “destruye” y se libera la memoria asignada, otra característica del ámbito de variables es el modificador static, este modificador hace que cuando se salga del contexto en que se creó la variable no se “destruya” y pueda ser utilizada la próxima vez que se trabaje dentro de ese ámbito (generalmente en el llamado a funciones). Por ejemplo: Function probar() { static $var=0; $var++; } Esta función inicializará la variable $var en cero y luego conservará el valor que vaya tomando a medida que se ejecuta la función. Variables variables Existen ocasiones en que es muy útil tener variables de nombres variables. Dicho de otro modo, son nombres de variables que se pueden establecer y usar dinámicamente. 3 Universidad de Mendoza Teleinformática I - Variables Suponiendo que se han definido las siguientes variables: $variar = “valor”; $valor = “auto”; $color = “rojo”; Para utilizar variables variables se utiliza el signo pesos ($) delante de la variable. echo $variar; //produce como salida: valor echo $valor; //produce como salida: auto echo $$variar; //produce como salida: auto En el tercer caso se utilizó una variable variable, como $nombre tiene como dato “valor” hacer $$nombre equivale a hacer $valor. Por ende, es evidente que $variable es el nombre de la variable; Si se asignara a $variar = “color” cuando se haga echo $$variar; dará como resultado “rojo” Para usar variables variables con arreglos, hay que resolver un problema de ambigüedad. Si se escribe $$a[1] el intérprete necesita saber si nos referimos a utilizar $a[1] como una variable, o si se pretendía utilizar $$a como variable y el índice [1] como índice de dicha variable. La sintaxis para resolver esta ambiguedad es: ${$a[1]} para el primer caso y ${$a}[1] para el segundo. Variables externas a PHP Formularios HTML (Métodos GET y POST) Cuando se envía un formulario a un script de PHP todas los objetos del formulario automáticamente pasan a ser variables en el script de PHP. Se puede enviar arreglos desde HTML a PHP de la siguiente forma: <form action=”siguiente.php3” method=”post”> <input type=”text” name=”direccion[calle]”> <input type=”text” name=”direccion[nro]”> <input type=”submit”> </form> En PHP versión 3 se pueden trabajar arreglos unidimensionales, en el caso del PHP 4 no existe esa restricción. HTTP Cookies Las cookies son un mecanismo de almacenamiento de datos en el cliente remoto, y de esa forma poder realizar diversos controles. PHP provee una forma de asignar cookies a través de la función SetCookie. Dado que las cookies son parte de del encabezado del HTTP las llamadas a la función SetCookie deben hacerse antes de enviar cualquier dato al navegador. Esta es la misma restricción que para la función header(). Las cookies que se reciben son transformadas automáticamente a variables en el PHP. 4 Universidad de Mendoza Teleinformática I - Variables Variables de entorno Puntos en los nombres de variables Como el punto es un carácter que se utiliza para concatenar cadenas, todos los puntos que vienen con variables serán transformadas a guión bajo. Determinando el tipo de variable PHP convierte los datos automáticamente al tipo que más le conviene según la operación que se está utilizando. Algunas veces para el usuario no es tan obvio de que tipo de dato se trata, para ello PHP incluye las siguientes funciones para poder determinar el tipo de dato: gettype() is_long() is_double() is_string() is_array() is_object() 5 Universidad de Mendoza Teleinformática I - Constantes Constantes PHP define varias constantes y además proporciona un mecanismo para definir más constantes en tiempo de ejecución. Las constantes son similares a las variables, pero se diferencian en ciertos puntos: Para declararlas se debe utilizar la función define(). Una vez que se ha definido no puede cambiarse el valor originalmente asignado. Las constantes no tienen el signo $ precediendolas. Se pueden acceder desde cualquier lugar sin tener en cuenta el ámbito de las variables. Solo pueden evaluar valores escalares. Declaración de constantes: define(“Nombre”, “valor”) Ejemplo: define("CONSTANTE", "esta es una constante"); echo CONSTANTE; Constantes que siempre están presentes en PHP __FILE__: Es el nombre del archivo que se está siendo interpretado actualmente. Si se usa dentro de un archivo que ha sido incluido o requerido nos dará el nombre del archivo incluido o requerido y no el del padre. __LINE__: Es el número de línea dentro del archivo que se está interpretando, si se utiliza dentro de un archivo incluido o requerido entonces la posición será la del archivo incluido o requerido. PHP_VERSION: Es un string que representa la versión del intérprete de PHP que está ejecutando el script que produjo el llamado a la constante, por ejemplo ‘3.0.8-dev’. PHP_OS: Es el nombre del sistema operativo en el cual se esta ejecutando el PHP, por ejemplo: ‘Linux’. TRUE: valor verdadero. FALSE: valor falso. E_ERROR: Denota un error distinto de un error de interpretación del cual no es posible recuperarse. E_WARNING: Denota una condición en la que PHP sabe que hay un error, pero de todas formas puede continuar; este puede ser capturado por el mismo script. E_PARSE: El interprete encontró sintaxis inválida en el archivo de comandos. La recuperación no es posible. E_NOTICE: Ocurrió algo que pudo ser o no un error. La ejecución continúa. Los ejemplos incluyen usar una cadena sin comillas como un índice "hash", o acceder a una variable que no ha sido inicializada. Las constantes E_* se usan típicamente con la función error_reporting() para configurar el nivel de informes de error. 1 Universidad de Mendoza Teleinformática I - Operadores Operadores Operadores aritméticos Ejemplo $a + $b $a - $b $a * $b $a / $b $a % $b Operación Suma Resta Multiplicación División Módulo Resultado La suma de $a y $b La diferencia entre $a y $b El producto entre $a y $b El cociente entre $a y $b El resto del cociente entre $a y $b Operador de asignación El operador de asignación es el “=”. PHP permite hacer algunos trucos al realizar asignaciones: $a = $b = 5; $a = ($b = 4) + 5; //$a y $b tienen valor 5 //$a tiene el valor 9 y $b el valor 4 Además del operador básico de asignación, pueden utilizarse “operadores combinados” para todos los operadores binarios aritméticos y de strings que permiten, de una sola vez, usar una variable en una expresión y luego establecer el valor de esa variable al resultado de la expresión. Ejemplo: $a = 10; $a += 20; $a = “Buenos “; $a .= “días”; //$a tendrá un valor de 10 //$a tendrá un valor de 30 //$a tendrá un valor “Buenos dias” Operadores a nivel de bits Ejemplo Operación Resultado $a & $b And Los bits que estén en 1 en $a y $b permanecerán en 1 $a | $b Or Los bits que estén en 1 en $a o $b permanecerán en 1 $a ^ $b Xor Los bits que estén en 1 o 0 a la vez en $a y $b se pondrán en 1 ~$a Not Todos los bits en 1 pasan a cero y los que están en cero pasan a1 $a « $b Desplazar a la izquierda Se desplazan los bits hacia la izquierda (equivale a multiplicar por 2) $a » $b Desplazar a la derecha Se desplazan los bits hacia la derecha (equivale a dividir por 2) Operadores de comparación Ejemplo Operación $a == $b Igual $a === $b Idéntico mismo tipo de dato (PHP4) $a != $b No igual $a !== $b No idéntico diferentes (PHP4) Resultado Verdadero si $a es igual a $b Verdadero si $a es igual a $b y además si son del Verdadero si $a es distinto a $b Verdadero si $a es distinto a $b o si sin de tipos de dato 1 Universidad de Mendoza Teleinformática I - Operadores $a < $b $a > $b $a <= $b $a >= $b Menor que Mayor que Menor o igual que Mayor o igual que Verdadero si $a es menor que el valor de $b Verdadero si $a es mayor que el valor de $b Verdadero si $a es menor o igual que el valor de $b Verdadero si $a es mayor o igual que el valor de $b Otro operador de comparación es el operador ternario ?: Ejemplo: (expresión 1) ? (expresión 2) : (expresión 3) En este caso se evalúa la expresión 1, si es verdadera entonces se evalúa la expresión 2, si la expresión 1 es falsa entonces se ejecuta la expresión 3. Los operadores se pueden dividir en operadores unarios y binarios. Los operadores unarios aquellos que operan sobre un término p.e. ~$a, los operadores binarios operan sobre 2 términos p.e. $a - $b. Operador de control de errores PHP tiene un solo operador de control de errores que es la arroba “@”. Para utilizarlo se antepone el carácter @ a la expresión que queremos controlar, si la expresión produce un error se ignorará el error generado. Si la opción track_errors fue habilitada en la configuración de PHP entonces se cargará el error en la variable global $php_errormsg. Esta variable contendrá solo el último error por lo que si se desea saber cual fue el error debemos asegurarnos de leerlo antes que otra línea de código genere un nuevo error y sobreescriba la variable. Hay que tener cuidado cuando se utiliza la @, ya que incluso deshabilita los errores críticos que detienen la ejecución de los scripts, esto quiere decir que si se utiliza la @ para suprimir errores que puedan llegar a producir algunas expresiones puede que se interrumpa la ejecución del script y no podamos saber cual fue el error. Operador de ejecución PHP tiene un solo operador de ejecución que es la comilla simple invertida “ ` ”, hay que aclarar que NO es la comilla simple. Cuando PHP encuentre una expresión entre comillas simples invertidas tratará de ejecutarla como una llamada al sistema operativo y se devolverá el resultado, este resultado puede ser asignado a una variable. Ejemplo En Unix o Linux: $salida = `ls -l`; echo “<PRE>$salida</PRE>”; En Windows $salida = `dir`; echo “<PRE>$salida</PRE>”; Operadores de incremento y decremento Ejemplo ++$a Operación Preincremento Resultado Devuelve $a después de haber incrementado en 1 su valor 2 Universidad de Mendoza Teleinformática I - Operadores $a++ --$a $a-- Postincremento Predecremento Postdecremento Devuelve $a, y después incrementa en 1 su valor Devuelve $a después de haber decrementado en 1 su valor Devuelve $a, y después decrementa en 1 su valor Ejemplos <?php echo "<h3>Postincremento</h3>"; $a = 5; echo "Debería ser 5: " . $a++ . "<br>\n"; echo "Debería ser 6: " . $a . "<br>\n"; echo "<h3>Preincremento</h3>"; $a = 5; echo "Debería ser 6: " . ++$a . "<br>\n"; echo "Debería ser 6: " . $a . "<br>\n"; echo "<h3>Postdecremento</h3>"; $a = 5;echo "Debería ser 5: " . $a-- . "<br>\n"; echo "Debería ser 4: " . $a . "<br>\n"; echo "<h3>Predecremento</h3>"; $a = 5; echo "Debería ser 4: " . --$a . "<br>\n"; echo "Debería ser 4: " . $a . "<br>\n"; ?> Operadores lógicos Ejemplo $a and $b And $a or $b $a xor $b Xor al mismo tiempo !$a Not $a && $b And $a || $b Or Operación Or Resultado Verdadero si $a y $b son verdaderos Verdadero si $a o $b son verdaderos Verdadero si $a o $b son verdaderos, pero no si $a y $b lo son Verdadero si $a no es verdadero Verdadero si $a y $b son verdaderos Verdadero si $a o $b son verdaderos La diferencia entre las dos formas distintas de operadores AND y OR es la precedencia de operadores que se explica más tarde. Precedencia de operadores La precedencia de operadores especifica cómo se agrupan las expresiones. Por ejemplo, en la expresión 1 + 5 * 3, la respuesta es 16 y no 18 porque el operador de multiplicación ("*") tiene una mayor precedencia que el de adición ("+"). La siguiente tabla lista la precedencia de operadores, indicándose primero los de menor precedencia. Asociatividad Operadores izquierda , izquierda or 3 Universidad de Mendoza Teleinformática I - Operadores izquierda izquierda derecha izquierda izquierda izquierda izquierda izquierda izquierda izquierda no asociativo no asociativo izquierda izquierda izquierda derecha derecha no asociativo xor and print = += -= *= /= .= %= &= |= ^= ~= <<= >>= ?: || && | ^ & == != === < <= > >= << >> +-. */% ! ~ ++ -- (int) (double) (string) (array) (object) @ [ new Operadores de strings Hay dos operadores de strings. El primero es el operador de concatenación punto “.”, el cual devuelve como resultado la concatenación de los argumentos a la derecha y a la izquierda del argumento. El segundo operador de concatenación es el operador de concatenación y asignación “.=” el cual agrega y asigna el argumento de la derecha en el de la izquierda. 4 Universidad de Mendoza Teleinformática I - Operadores Estructuras de control IF La construcción IF es una de las construcciones más importantes de los lenguajes de programación, y en PHP no es la excepción. Permite ejecutar fragmentos de programas en forma condicional. La estructura de IF es similar al lenguaje C. Estructura: if (expresión) sentencia En la definición se evalúa la condición de verdadero de la expresión, si es verdadero se ejecutará la sentencia, en caso de ser falso se ignorará. Ejemplo if ($a < $b) echo ‘$a es menor que $b’; Siempre que se cumpla que $a sea menor que $b se ejecutará el la porción de código. Pueden anidarse las estructuras IF dentro de otras, de esta forma si pueden armar estructuras muy complejas. ELSE Si se quiere ejecutar una porción de código cuando cierta expresión es verdadera se utiliza la estructura IF, pero si quisiéramos ejecutar una porción de código cuando no se cumple la condición se utiliza la estructura ELSE. ELSE extiende la funcionalidad a la estructura IF. Ejemplo: if ($a < $b) echo ‘$a es menor que $b’; else echo ‘$a es mayor que $b’; ELSEIF Es una combinación entre else y el if, como el else extiende al if cuando la condición del if no se cumple. Pero la diferencia es que el elseif se ejecuta si la condición dentro del elseif es verdadera. Ejemplo: if ($a < $b) echo ‘$a es menor que $b’; elseif ($a == $b) echo ‘$a es igual a $b’; 1 Universidad de Mendoza Teleinformática I - Operadores else echo ‘$a es mayor que $b’; WHILE El lazo while es el más simple en PHP, el comportamiento es igual al del lenguaje C. La estructura básica del lazo while es la siguiente: while (expresión) sentencias El funcionamiento del lazo while es muy simple, se ejecutará el bloque de sentencias anidadas sentencias hasta que la expresión sea verdadera. La expresión sólo se evalúa cada vez que se reinicia el lazo de sentencias, por lo tanto por más que se cumpla la condición de la expresión en medio de la ejecución no se terminará de ejecutar el bloque de sentencias hasta que se evalúe la expresión al finalizar el bloque (antes de comenzar una nueva iteración del ciclo). Puede ocurrir que la expresión evalúe a verdadero en la primera iteración, por lo tanto no se ejecutará el bloque de sentencias. Ejemplo $i = 1; while ($i <= 10) { print $i++; } DO .. WHILE do {sentencias;} while (expresión); El lazo do .. while es similar al bloque while, la principal diferencia es que la condición de la expresión se evalúa al finalizar el bloque de sentencias. De esta forma nos aseguramos que por lo menos se ejecute una vez el bloque de sentencias. $i =1; do { print $i++; } while ($i <= 10); Existe una forma de interrumpir la ejecución de un bloque de sentencias de manera inmediata y así abandonarlo y continuar con la siguiente sentencia a continuación del lazo do .. while. La intrucción que nos permite realizar esto es break. Ejemplo 2 Universidad de Mendoza Teleinformática I - Operadores $i =1; do { print $i++; if ($i == 5) {break;} } while ($i <= 10); print $i; En el ejemplo cuando $i valga 5 la condición del if será verdadera y se ejecutará la sentencia break, a continuación se ejecutará la sentencia print $i. FOR El lazo For es el más complejo en PHP, el comportamiento es similar al del lenguaje C. For (expresión 1; expresión 2; expresión 3) sentencias La expresión 1 se ejecuta UNA SOLA VEZ de manera incondicional al principio del lazo, estas sentencias se utilizan por lo general para inicializar variables. La expresión 2 se evalúa cada vez que se inicia el ciclo de sentencias, y se seguirá haciendo siempre y cuando la expresión 2 sea evaluada como verdadera. Al finalizar el bloque de sentencias, se ejecuta la expresión 3 y a continuación se vuelve a evaluar la expresión 2. Cada expresión puede ser vacía (expresión 1 o expresión 2 o expresión 3), en el caso en que la expresión 2 sea vacía será evaluada siempre verdadera. A primera vista esto puede resultar inútil, ya que nunca terminará el lazo for, pero se podría terminar la ejecución haciendo una evaluación con las sentencias if y break. Ejemplos: Ejemplo 1 for ($i = 1; $i <= 10; $i++) { print $i; } Ejemplo 2 for ($i = 1;;$i++) { if ($i > 10) { break; } print $i; } Ejemplo 3 $i = 1; for (;;) 3 Universidad de Mendoza Teleinformática I - Operadores { if ($i > 10) { break; } print $i; $i++; } Ejemplo 4 for ($i = 1; $i <= 10; print $i, $i++) ; Estos 4 ejemplos dan el mismo resultado, pero da una muestra de cómo se puede utilizar los lazos for de formas diferentes. FOREACH El lazo foreach se introdujo en la versión 4 de PHP. Es una forma corta y sencilla de recorrer los elementos de un arreglo. Existen 2 formas de declarar los lazos foreach, que se describen a continuación: foreach(arreglo as $valor) sentencias foreach(arreglo as $clave => $valor) sentencias En cada iteración del lazo la variable $valor va conteniendo el valor de cada uno de los elementos del arreglo y el puntero que indica el elemento actual se va incrementando. Cada vez que se inicie el lazo foreach el puntero del arreglo inicia desde el primer elemento, por lo que no hay que reestablecer el puntero cada vez que queramos leer los elementos del arreglo. La diferencia entre la primer forma de declarar el lazo de la segunda es que en la última se irá almacenando cada elemento (clave o key) en la variable $clave. Hay que aclarar que el lazo foreach trabaja sobre una copia del arreglo y no sobre el propio arreglo, por lo que si se realizan cambios a los elementos el arreglo original no se verá afectado. Ejemplos: reset ($arr); while (list(, $value) = each ($arr)) { echo "Value: $value<br>\n"; } foreach ($arr as $value) { echo "Value: $value<br>\n"; } reset ($arreglo); 4 Universidad de Mendoza Teleinformática I - Operadores while (list($clave, $valor) = each ($arreglo)) { echo "Clave: $clave; Valor: $valor<br>\n"; } foreach ($arreglo as $clave => $valor) { echo "Clave: $clave; Valor: $valor<br>\n"; } Estos son ejemplos de cómo se leen elementos de un arreglo con foreach y como se hacía en PHP versión 3. Los ejemplos corresponden a las dos formas en las que se pueden declarar los lazos foreach. BREAK La sentencia break permite detener la ejecución de los lazos for, while y switch. Opcionalmente se le puede pasar un argumento que indicará cuantos niveles de anidamiento queremos detener. Ejemplo: $i = 0; while (++$i) { switch ($i) { case 5: echo "At 5<br>\n"; break 1; /* Sale solamente del switch. */ case 10: echo "En 10; salir <br>\n"; break 2; /* Sale del switch y del while. */ default: break; } } CONTINUE La sentencia continue permite saltear la ejecución del resto de una iteración y continua ejecutando desde el comienzo de la próxima iteración. La diferencia con break es que continua la ejecución del lazo que contiene la sentencia y break la interrumpe. Al igual que break acepta un parámetro opcional que permite saltear varios niveles de iteraciones. SWITCH La sentencia switch equivale a hacer una serie de comparaciones con la sentencia if, pero sobre el mismo valor, de hecho la sentencia switch fue hecha para esto. En muchas ocasiones uno desea hacer comparaciones de una misma variable con un cierto número de valores y en función de cada una de las comparaciones ejecutar una porción de código distinto. 5 Universidad de Mendoza Teleinformática I - Operadores if ($i == 0) { print "i es igual a 0"; } if ($i == 1) { print "i es igual a 1"; } if ($i == 2) { print "i es igual a 2"; } switch ($i) { case 0: print "i es igual a 0"; break; case 1: print "i es igual a 1"; break; case 2: print "i es igual a 2"; break; } El funcionamiento de switch es muy sencillo: el programa busca alguna sentencia case en la que coincida el valor con el valor de la variable $i, una vez encontrada ejecutará el código asociado al case y se detendrá en la sentencia break. Si no se escribe la sentencia break al final del bloque seguirá ejecutando hasta terminar con los case que siguen o hasta que encuentre la sentencia break. Muchas veces se desea ejecutar la misma porción de código para uno o más valores de la variable $i, para este caso se hará lo siguiente: switch ($i) { case 0: case 1: case 2 print "i es menor o igual que 2"; break; case 3 print "i es mayor que 2"; break; } Existe una opción dentro de la declaración del switch que sirve para ejecutar una porción de código cuando ninguna de las opciones se han cumplido. Para este caso se utiliza la sentencia default. Ejemplo: switch ($i) { case 0: 6 Universidad de Mendoza Teleinformática I - Operadores print "i es igual a 0"; break; case 1: print "i es igual a 1"; break; default: print "i es distinto de 0 y de 1"; break; } 7 Universidad de Mendoza Teleinformática I – Tipos de datos no primitivos Tipos de datos no primitivos Arreglos (arrays) Un arreglo es un conjunto ordenado de elementos del mismo tipo. Los arreglos pueden ser de una dimensión o de múltiples dimensiones. En PHP se pueden referenciar los arreglos como tablas de comparaciones (arreglo asociativo) – también llamadas hash tables– o como vectores, esto no significa que existan dos tipos de arreglos sino que a los arreglos se los puede acceder de las dos formas. Arreglos de una dimensión Sintaxis $arreglo[clave]=valor; //en forma de vector Para poder leer o escribir un dato de un arreglo como vector la clave deberá ser un número entero. $arreglo[‘clave’]=valor; //en forma de arreglo asociativo Para poder leer o escribir un dato de un arreglo como arreglo asociativo la clave deberá ser un una palabra (string). Ejemplo: $arreglo[0]=1; $arreglo[1]=20; $arreglo[‘texto’]=300; Si el programador quisiera agregar datos en la última posición (en el caso del ejemplo $arreglo[2]) no debería preocuparse en averiguar cual fue el último elemento cargado previamente, existe una forma que consiste en lo siguiente: $arreglo[]=25; //equivale a $arreglo[2]=25; $arreglo[]=122; //equivale a $arreglo[3]=122; De esta forma se simplifica enormemente el código de la aplicación ya que no se tiene que hacer controles ni llevar variables extras para saber cuál será el último elemento. Existe una gran cantidad de sentencias que hacen que PHP sea un lenguaje muy poderoso en el manejo de arreglos, como por ejemplo: Funciones de ordenamiento asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), y uksort() Funciones de conteo count(), sizeof() Funciones para recorrer arreglos next(), prev(), each() Funciones de para unir arreglos 1 Universidad de Mendoza Teleinformática I – Tipos de datos no primitivos array_merge(), array_merge_recursive() Función de mezclado shuffle() Arreglos multidimensionales Los arreglos de múltiples dimensiones son muy fáciles de definir, simplemente se agrega una clave por cada dimensión deseada. Ejemplo $arreglo[0]=1; $arreglo[1]=0; //arreglo de una dimensión $arreglo[0][0]=1; $arreglo[0][1]=2; //arreglo de dos dimensiones $arreglo[‘accion’][0]=2; $arreglo[‘accion’][1]=3; $arreglo[0][‘color’]=3; //arreglo de 2 dimensiones mezcla de arreglo asociativo y vectorial $arreglo[0][0][0]=1; //arreglo de 3 dimensiones Puede verse en los ejemplos que se pueden mezclar arreglos asociativos con arreglos vectoriales y ordenarlo de cualquier forma que deseemos. En la versión 3 de PHP no es posible referenciar un arreglo multidimensional, en forma directa dentro de los strings. Es evidente que en el siguiente ejemplo: $arreglo[‘color’][0]=”amarillo”; echo “El color seleccionado es $arreglo[‘color’][0]”; Esto no funcionará en la versión 3 de PHP, en su lugar deberíamos hacer lo siguiente: $arreglo[‘color’][0]=”amarillo”; echo “El color seleccionado es “.$arreglo[‘color’][0]”; //Se quita la expresión fuera del string y se concatena Esta limitación del intérprete de PHP en la versión 3 fue solucionada en la versión 4 haciendo lo siguiente: $arreglo[‘color’][0]=”amarillo”; echo “El color seleccionado es {$arreglo[‘color’][0]}”; Se pueden llenar los arreglos de distintas maneras, una muy ingeniosa es utilizar la sentencia array(). Ejemplo: $arreglo["color"] = "rojo"; $arreglo["gusto"] = "dulce"; $arreglo["forma"] = "redonda"; 2 Universidad de Mendoza Teleinformática I – Tipos de datos no primitivos $arreglo["nombre"] = "manzana"; $arreglo[3] = 4; el mismo arreglo puede llenarse utilizando array() de la siguiente forma: $arreglo = array( “color” => “rojo” , “gusto” => “dulce” , “forma” => “redonda” , “nombre” => “manzana” , 3 => 4); También se pueden llenar arreglos multidimensionales con la sentencia array() anidándolos. Ejemplo $arreglo = array( “manzana” => array( “color” => “rojo” , “gusto” => “dulce” , “forma” => “redonda” ) “naranja” => array( “color” => “anaranjado” , “gusto” => “acido” , “forma” => “redonda” ) ) al hacer echo arreglo[‘manzana’][‘gusto’]; El resultado será dulce. Clases y objetos Definición de clases class Fruta { var color; var gusto; var forma; function cargar_datos($c, $g, $f) {$this->color=$c; $this->gusto=$g; $this->forma=$f; } function mostrar_datos() {echo “Color: “.$this->color.”<br>”; echo “Gusto: “.$this->gusto.”<br>”; echo “forma: “.$this->forma.”<br>”; } 3 Universidad de Mendoza Teleinformática I – Tipos de datos no primitivos } $manzana= new Fruta; $manzana->cargar_datos(“rojo”, ”dulce”, ”redonda”); Para crear un objeto de la clase Fruta se debe utilizar la sentencia new. La sentencia new se utiliza para crear una variable nueva. Una clase puede heredar de otra clase o dicho de otra forma una clase puede extender a otra. Para hacerlo posible se utiliza el modificador extends. Al extender una clase la nueva clase hereda las propiedades y métodos de la clase padre, y a esta le podemos agregar nuevas propiedades y métodos. Constructores El constructor de una clase es un método que lleva el mismo nombre de la clase y se ejecuta automáticamente cuando se crea un nuevo objeto de la clase. class Fruta { var color; var gusto; var forma; function Fruta($c, $g, $f) {$this->color=$c; $this->gusto=$g; $this->forma=$f; } function cargar_datos($c, $g, $f) {$this->color=$c; $this->gusto=$g; $this->forma=$f; } function mostrar_datos() {echo “Color: “.$this->color.”<br>”; echo “Gusto: “.$this->gusto.”<br>”; echo “forma: “.$this->forma.”<br>”; } } $manzana= new Fruta; $manzana->cargar_datos(“rojo”, ”dulce”, ”redonda”); Creación de un objeto del tipo Fruta utilizando el constructor de la clase 4 Universidad de Mendoza Teleinformática I – Tipos de datos no primitivos $manzana= new Fruta (“rojo”, ”dulce”, ”redonda”); 5