Implantación de Aplicaciones WebUT 4: Programación web en PHP  con acceso a bases de datos.   CFGS «Administración de Sist...
Proyecto ARCE   David H. Martín Alonso                                             IES José Luis Sampedro    CIFP Juan de ...
PHP Y BASES DE DATOS.                                 Contenidos                        Internacionalización, localización...
PHP Y BASES DE DATOS  Internacionalización, localización                         Red profesional colaborativa del ciclo   ...
PHP Y BASES DE DATOS.                Programación orientada a objetos                                ASCII                ...
PHP Y BASES DE DATOS.                                     i18n – UTF8■ i18n + L10n           Internacionalización (i18n) y...
PHP Y BASES DE DATOS.                ¿Cómo usar PHP con UTF8?■ i18n + L10n           • Cadenas de texto en codificaciones ...
PHP Y BASES DE DATOS.                        Actividad I: mbstring                            Ordenar en PHP un array de t...
PHP Y BASES DE DATOS.                Actividad II: Unicode en MySQL                         Buscar la base de datos «World...
PHP Y BASES DE DATOS.                                             L10n■ i18n + L10n           • Identificación y ajuste al...
PHP Y BASES DE DATOS.                   Actividad III: traducciones                          Localizar los archivos de tra...
PHP Y BASES DE DATOS         Introducción a la  Programación Orientada a Objetos                        Red profesional co...
PHP Y BASES DE DATOS.                Programación orientada a objetos□ i18n + L10n             Programación orientada a ob...
PHP Y BASES DE DATOS.                                 POO: beneficios□ i18n + L10n■ POO□ Documentación□ Bases de Datos    ...
PHP Y BASES DE DATOS.                                   POO: Objetos□ i18n + L10n            • Tipo compuesto: abstracción...
PHP Y BASES DE DATOS.                                     POO: Historia□ i18n + L10n           •   1967: Simula■ POO□ Docu...
PHP Y BASES DE DATOS.                               POO: Lenguajes□ i18n + L10n           • C++■ POO                     –...
PHP Y BASES DE DATOS.                        POO: Diseño con UML□ i18n + L10n            • Lenguaje Unificado de Modelado■...
PHP Y BASES DE DATOS.                Programación orientada a objetos                                POO                  ...
PHP Y BASES DE DATOS.                                 Clases en PHP□ i18n + L10n           • Código relacionado con clases...
PHP Y BASES DE DATOS.                        Definición de las clases□ i18n + L10n           • Declaración: class EjemploT...
PHP Y BASES DE DATOS.                             Sintaxis esencial□ i18n + L10n           • Declaración de clases:■ POO  ...
PHP Y BASES DE DATOS.                           POO en PHP: Ejemplo I                #!/usr/bin/php -f                   (...
PHP Y BASES DE DATOS.                         POO en PHP                                    class                         ...
PHP Y BASES DE DATOS.                                       Visibilidad□ i18n + L10n           • private■ POO             ...
PHP Y BASES DE DATOS.                                POO avanzado□ i18n + L10n           • Interfaces: como clases, pero s...
PHP Y BASES DE DATOS.                                   Excepciones□ i18n + L10n           • Excepciones: objetos para ges...
PHP Y BASES DE DATOS  Documentación en PHP: Doxygen                       Red profesional colaborativa del ciclo          ...
PHP Y BASES DE DATOS.                        Documentación: Finalidad□ i18n + L10n           Finalidad de la documentación...
PHP Y BASES DE DATOS.                        Documentación: Etapas□ i18n + L10n           • Distintas metodologías        ...
PHP Y BASES DE DATOS.                        Documentación de código□ i18n + L10n            • La falta de claridad en el ...
PHP Y BASES DE DATOS.                        Documentación de interfaz□ i18n + L10n           Comentarios a nivel de módul...
PHP Y BASES DE DATOS.                        El formato «Javadoc» (I)□ i18n + L10n            • Java: lenguaje de programa...
PHP Y BASES DE DATOS.                        El formato «Javadoc» (II)                  Compatible C/Java/PHP, pero con do...
PHP Y BASES DE DATOS.                   Ejemplo PHP: tablero.php            <?php            /** @file tablero.php Convers...
PHP Y BASES DE DATOS.                                       Doxygen□ i18n + L10n           • Generador de documentación li...
PHP Y BASES DE DATOS.                        Doxyfile: sugerencias□ i18n + L10n             –   PROJECT_NAME             =...
PHP Y BASES DE DATOS.                                    Reglas de estilo□ i18n + L10n           Nuestro objetivo es docum...
PHP Y BASES DE DATOS.                Etiquetas Javadoc / Doxygen□ i18n + L10n           • Delimitación de comentarios: /**...
PHP Y BASES DE DATOS.                          Doxygen: instalación□ i18n + L10n           GNU Linux / Ubuntu□ POO■ Docume...
PHP Y BASES DE DATOS.         PHP + Doxygen en MS Windows (I)Enero de 2013                  ARCE: «Administración de Siste...
PHP Y BASES DE DATOS.       PHP + Doxygen en MS Windows (II)Enero de 2013                ARCE: «Administración de Sistemas...
PHP Y BASES DE DATOS  Acceso a bases de datos con PDO                        Red profesional colaborativa del ciclo       ...
PHP Y BASES DE DATOS.                        PHP Data Objects (PDO)□ i18n + L10n            • Extensión de PHP para acceso...
PHP Y BASES DE DATOS.                PDO I: Conexión y desconexión□ i18n + L10n              • Conexión = creación del obj...
PHP Y BASES DE DATOS.                               PDO II: Consultas□ i18n + L10n           Dos estrategias:□ POO□ Docume...
PHP Y BASES DE DATOS.                Ejemplo PHP: consulta MySQL            require_once(conf/config.php);            $sql...
PHP Y BASES DE DATOS.                PDO III: Consultas y resultados□ i18n + L10n            Resultados: proceso de PDOSta...
PHP Y BASES DE DATOS.                        Ejemplo PHP: entrada            require_once(conf/config.php);            $sq...
PHP Y BASES DE DATOS.                                     Referencias                        Sintes, B. (2011, IES Abastos...
PHP Y BASES DE DATOS.                                     Licencia                Este material está disponible bajo una L...
PHP Y BASES DE DATOS.                        ¿Dudas o cuestiones?Enero de 2013                            ARCE: «Administr...
Upcoming SlideShare
Loading in …5
×

IW-UTXX: Programación web en PHP con bases de datos

951 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
951
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
34
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

IW-UTXX: Programación web en PHP con bases de datos

  1. 1. Implantación de Aplicaciones WebUT 4: Programación web en PHP con acceso a bases de datos. CFGS «Administración de Sistemas Informáticos en Red» CIFP Juan de Colonia (Burgos) David H. Martín Alonso – Curso 2012/2013 –
  2. 2. Proyecto ARCE David H. Martín Alonso IES José Luis Sampedro CIFP Juan de Colonia Tres Cantos (Madrid) BurgosJosé Luis Rodríguez Rodríguez Víctor Cabezas Pozo IES Jacarandá IES Conselleria Brenes (Sevilla) Valencia Red profesional colaborativa del ciclo «Administración de Sistemas Informáticos en Red»
  3. 3. PHP Y BASES DE DATOS. Contenidos Internacionalización, localización Programación orientada a objetos Documentación Acceso a bases de datos con PDOEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  4. 4. PHP Y BASES DE DATOS Internacionalización, localización Red profesional colaborativa del ciclo «Administración de Sistemas Informáticos en Red»
  5. 5. PHP Y BASES DE DATOS. Programación orientada a objetos ASCII CP 850 Win-1252 ISO-8859-1 Unicode UTF-8Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  6. 6. PHP Y BASES DE DATOS. i18n – UTF8■ i18n + L10n Internacionalización (i18n) y localización (L10n)□ POO□ Documentación i + 18 letras + n L + 10 letras + n□ Bases de Datos • Soporte de idiomas – Codificaciones de caracteres diversas – Traducción de interfaces de usuario 6/52 • Requisito para las aplicaciones web – Por dimensión internacional de la WWW – Por variedad de codificaciones en los sistemas operativos • Necesidad de coherencia entre aplicaciones – Navegador – PHP – Base de datos • Propuesta: uso generalizado de UTF-8 – Contenido HTTP – Codificación HTML – Texto recogido en formularios – Almacenamiento de variables en PHP – Funciones alternativas de tratamiento de cadenas en PHP – Definición de bases de datosEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  7. 7. PHP Y BASES DE DATOS. ¿Cómo usar PHP con UTF8?■ i18n + L10n • Cadenas de texto en codificaciones multibyte: mbstring□ POO – Las funciones originales son para codificaciones de 8 bits□ Documentación□ Bases de Datos – Objetivo de mejora en PHP6 • PHP: – La codificación interna es ISO-8859-1. La cambiamos: mb_internal_encoding( UTF-8 ); 7/52 – Usamos las funciones alternativas de «mbstring» Ej.: strlen () → mb_strlen() • HTTP header( Content-Type: text/html; charset=UTF-8 ); • HTML – Aunque se prima la cabecera HTTP, lo pondremos también <meta charset="utf-8"> • Formularios: – Los navegadores respetarán la codificación de HTML • MySQL CREATE nombre_bd DEFAULT CHARACTER SET utf8; SET NAMES utf8;Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  8. 8. PHP Y BASES DE DATOS. Actividad I: mbstring Ordenar en PHP un array de textos «difíciles» como puede ser {paño, palo, pato… }. Será necesario controlar correctamente el uso de cadenas multibyte en codificación UTF-8 y la localización española. Se pueden emplear para ello las siguientes funciones: mb_internal_encoding setlocale asort mb_strlen mb_convert_encodingEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  9. 9. PHP Y BASES DE DATOS. Actividad II: Unicode en MySQL Buscar la base de datos «World», base de datos de ejemplo distribuida para MySQL. Adaptar el archivo para que la base de datos se almacene correctamente en UTF-8 y que las tablas empleen el orden ortográfico estándar de Unicode.Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  10. 10. PHP Y BASES DE DATOS. L10n■ i18n + L10n • Identificación y ajuste al idioma de usuario□ POO – Textos de la interfaz de usuario□ Documentación□ Bases de Datos – Formatos de fecha y otros – Ordenación de cadenas respetando alfabetos nacionales • Traducciones – Identificación y cambio de localización 10/52 setlocale(LC_ALL, es_ES.UTF8); – Incorporar traducciones del idioma deseado → array – Acceso a TODOS los textos: array + claves printf($text[Suma de %d y %d], $a, $b); – Evitar el operador de concatenación «.» El orden lo marca el traductor, NO el programador. – Deberíamos escribir el propio código en inglés... ¿no? • Presencia en el código – Ordenación asort($lista, SORT_LOCALE_STRING); – Fechas en cadenas de textoEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  11. 11. PHP Y BASES DE DATOS. Actividad III: traducciones Localizar los archivos de traducción de Joomla, observarlos, revisarlos, retocarlos. • En versiones anteriores de Joomla encontrábamos dos paquetes de traducciones: uno «recomendado» y el otro en JoomlaSpanish incompleto. Observar la presencia abundante de cadenas de formato de tipo «printf» y recordar su conveniencia frente al operador «.» de concatenación de cadenas.Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  12. 12. PHP Y BASES DE DATOS Introducción a la Programación Orientada a Objetos Red profesional colaborativa del ciclo «Administración de Sistemas Informáticos en Red»
  13. 13. PHP Y BASES DE DATOS. Programación orientada a objetos□ i18n + L10n Programación orientada a objetos (OOP, POO)■ POO□ Documentación□ Bases de Datos Forma o «paradigma» de programación • Antecedentes: programación procedimental, modular, 13/52 orientada a procesos – El código actúa sobre los datos • Programación orientada a objetos – El programa se organiza en torno a los datos – Conserva estilo: programación estructurada, modular Objeto: datos + «sus» procedimientos – Abstracción del mundo real – Propiedades encapsuladas, privadas, protegidas Símil: tarjetas inteligentes vs. tarjetas magnéticas • Clases: tipo, plantilla para replicar objetos – Jerarquía de herencia. Perfeccionamiento progresivo.Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  14. 14. PHP Y BASES DE DATOS. POO: beneficios□ i18n + L10n■ POO□ Documentación□ Bases de Datos Beneficios de la POO: € • Calidad: – robustez del código / reducción de errores € € • Reutilización de código 14/52 • Facilidad de mantenimiento • Consecuencia: reducción de costes globales • Gestión de elementos con mucha variedad Entornos gráficos de usuario • Incorporado a todos los lenguajes modernos $ $Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  15. 15. PHP Y BASES DE DATOS. POO: Objetos□ i18n + L10n • Tipo compuesto: abstracción, estructura con datos y■ POO operaciones□ Documentación□ Bases de Datos – Datos, atributos, variables → Estado – Operaciones, funciones, métodos → Comportamiento Principios de la POO: 15/52 • Encapsulación, ocultamiento – Datos afines se mantienen de forma conjunta y privada – Los procedimientos ligados a esos datos también – Los cambios están controlados – Acceso a través de una interfaz de métodos públicos • Herencia – Clases: definición de tipos de objetos – Objetos: múltiples instancias de esas clases – Podemos derivar otras clases con funcionalidades añadidas • Polimorfismo – Una misma acción puede tomar distintas formas en los descendientesEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  16. 16. PHP Y BASES DE DATOS. POO: Historia□ i18n + L10n • 1967: Simula■ POO□ Documentación • 70: Smalltalk□ Bases de Datos • 1983: C++ • 1985: Eiffel • 1995: Java 16/52 • 2001: C# (plataforma .NET) • Incorporado en los lenguajes modernos – Perl, PHP, PythonEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  17. 17. PHP Y BASES DE DATOS. POO: Lenguajes□ i18n + L10n • C++■ POO – Lenguaje compilado, alto rendimiento□ Documentación□ Bases de Datos – Ámbito: programación de sistemas • Java, C# – Lenguajes de propósito general – Ámbito: programación de aplicaciones locales y web 17/52 – Basados en máquina virtual: compilación + traducción • PHP – Lenguaje de propósito general – Lenguaje interpretado, de scripts, portable – Ámbito: muy popular en programación para la web – Soporte en evolución, estable en PHP versión 5Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  18. 18. PHP Y BASES DE DATOS. POO: Diseño con UML□ i18n + L10n • Lenguaje Unificado de Modelado■ POO – Unified Modelling Language (UML)□ Documentación□ Bases de Datos – Herramienta gráfica de diseño para OO – Describe diversos tipos de diagramas Los diagramas de clase permiten representar 18/52 • Jerarquía de clases / interfaces • Elementos – Atributos, tipos y ámbitos – Métodos y sus parámetros formales – Asociaciones [TUML]Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  19. 19. PHP Y BASES DE DATOS. Programación orientada a objetos POO UML Clases Objetos Atributos MétodosEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  20. 20. PHP Y BASES DE DATOS. Clases en PHP□ i18n + L10n • Código relacionado con clases y objetos ¿dónde?■ POO En bloques <?php?>, intercalado□ Documentación□ Bases de Datos include o require para incorporar todas las partes – Definición de las clases Recomendable, no obligatorio, usar 1 archivo × 1 clase No se ejecuta hasta ser requerido por algún objeto 20/52 – Instanciación y manipulación de objetosEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  21. 21. PHP Y BASES DE DATOS. Definición de las clases□ i18n + L10n • Declaración: class EjemploTipo {…}■ POO□ Documentación – Identificador con estilo CamelCase□ Bases de Datos Mayúsculas como separadores de palabras – Nombre de archivo ≈ nombre de la clase – Definición recogida entre las llaves • Atributos: variables que representan estado 21/52 – Al comienzo de la clase – En PHP no se requiere prefijar el tipo de dato – Con modificadores de acceso: público/privado – Probablemente privados, para evitar acceso externo directo Métodos __get y __set para acceder a ellos • Métodos: código que implementa capacidades – FuncionesEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  22. 22. PHP Y BASES DE DATOS. Sintaxis esencial□ i18n + L10n • Declaración de clases:■ POO class HMundo {…};□ Documentación …o con herencia□ Bases de Datos class HMundo extends Saludo {…}; • Declaración de atributos: public $datoVulnerable; private $nombrePropio; 22/52 • Declaración de métodos: public function sumaPareja($a, $b) {…}; …o para el constructor inicial public function __construct(…) {…}; • Acceso interno a atributos: $this->telefonoMovil …en PHP SÍ es obligatorio siempre poner $this • Instanciación de objetos: $bienvenida=new HMundo(Pepe); • Acceso externo a métodos: $bienvenida->saludar();Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  23. 23. PHP Y BASES DE DATOS. POO en PHP: Ejemplo I #!/usr/bin/php -f (1) Comienzo de bloque PHP <?php (2) Declaración de la clase class HolaMundo { (3) Declaración de atributos private $nombre; (4) Constructor de la clase public function __construct($nombre) { $this->nombre=$nombre; } (6) Acceso a los atributos del objeto (5) Definición de método public function saluda() { $mensaje=sprintf("¡Hola %s!",$this->nombre); return $mensaje; } } (7) Instanciación de objeto $objeto=new HolaMundo(David); printf("%sn",$objeto->saluda()); ?> (8) Acceso a métodoEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  24. 24. PHP Y BASES DE DATOS. POO en PHP class new __construct public / private / protected get / set →Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  25. 25. PHP Y BASES DE DATOS. Visibilidad□ i18n + L10n • private■ POO – Acceso privado, solo desde métodos de la propia clase.□ Documentación□ Bases de Datos – Uso: habitualmente los atributos serán todos privados. – Uso: cierto métodos reservados para uso interno. • public – Acceso público, desde cualquier parte del código. 25/52 – Uso: conjunto seleccionado de métodos visibles. • protected – Acceso protegido, desde métodos de clases descendientes. – Uso: limitado, acceso entre métodos y atributos emparentados • Propiedades: atributos «virtuales» – Acceso externo como atributos públicos. – Virtualidad gestionada por «métodos mágicos» __set() y __get() – Adquirido de C#Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  26. 26. PHP Y BASES DE DATOS. POO avanzado□ i18n + L10n • Interfaces: como clases, pero sin código■ POO – Métodos declarados, pero sin implementar□ Documentación□ Bases de Datos – Se requiere de una clase derivada para crear objetos – Permiten herencia múltiple interface iRedondo {…}; class Esfera implements iRedondo {…}; $bola=new Esfera(); 26/52 – Métodos y clases abstractas: solo parcialmente incompletas abstract class AMedias { abstract protected function pendiente(); …} • Elementos estáticos – Comunes para toda la clase: variables, constantes y métodos. – Accesibles sin necesidad de instanciar ningún objeto • Operador de acceso «::» – Acceso a elementos de clase, análogo a «→» • Métodos mágicos – Nombres reservados para usos especiales – __construct, __set, __get …Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  27. 27. PHP Y BASES DE DATOS. Excepciones□ i18n + L10n • Excepciones: objetos para gestión de errores■ POO – Se «lanzan» cuando se produce una situación que impide□ Documentación completar un método.□ Bases de Datos – Se interrumpe la ejecución del método y se vuelve al método llamante. En éste se repite la misma situación y la excepción se va transfiriendo a medida que subimos por la «pila» de funciones. 27/52 – Código mínimo. Sólo nombre y jerarquía para identificarlas. • Se pueden «capturar»: bloques try-catch – Se interrumpe la propagación de la excepción. – Se ejecuta el bloque «catch» donde se analizar la situación. Ejecutar el código (try) y si salta una excepción que queramos capturar (catch) derivar a ese bloque. – Tres opciones: Burocrática: avisar y continuar. Mala idea generalmente. Reintento: revisar los parámetros y repetir. Propagación: lanzar otra excepción y seguir la cadena. – Plan: propagar hacia arriba hasta que el método responsable del dato la capture y tome otras acciones.Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  28. 28. PHP Y BASES DE DATOS Documentación en PHP: Doxygen Red profesional colaborativa del ciclo «Administración de Sistemas Informáticos en Red»
  29. 29. PHP Y BASES DE DATOS. Documentación: Finalidad□ i18n + L10n Finalidad de la documentación□ POO■ Documentación • Intercambio de conocimiento acerca de la aplicación y□ Bases de Datos su desarrollo • Aprovechamiento óptimo de la funcionalidad programada 29/52 Calidad → Reducción de costes € • Costes de desarrollo – – Adecuación a las especificaciones Reutilización de código € € – Reducción de errores, reducción del esfuerzo de reparación – Reducción del esfuerzo de adaptación y mejora • Costes de explotación – – Tiempo de aprendizaje Uso eficiente $ $ – Reducción de errores de uso • Supone un coste inicial amortizado inmediatamenteEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  30. 30. PHP Y BASES DE DATOS. Documentación: Etapas□ i18n + L10n • Distintas metodologías de desarrollo concretan□ POO distintos modelos■ Documentación□ Bases de Datos • Análisis y desarrollo – Ordinogramas, pseudocódigo (Prog. estructurada) – UML , diagramas de clases (Prog. Orientada a Objetos) – Diagramas entidad-relación (Bases de Datos) • Codificación 30/52 – Paradigmas: modular, estructurado, orientado a objetos – Identificadores – Comentarios en línea Entre el código, aspectos no obvios del algoritmo – Comentarios formales Niveles: archivos, clases, funciones, parámetros • Puesta en producción – Manual de programador – Manual de administrador – Manual de usuarioEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  31. 31. PHP Y BASES DE DATOS. Documentación de código□ i18n + L10n • La falta de claridad en el código limita seriamente el□ POO desarrollo■ Documentación□ Bases de Datos – El esfuerzo de programación crece exponencialmente • La programación estructurada emplea patrones conocidos – Fácil comprensión 31/52 – Fácil adaptación – Importancia de espaciado y sangrado • Los identificadores facilitan la lectura y la comprensión – Nombres significativos – Importancia de evitar nombres crípticos – Diferentes convenios asociados históricamente con cada lenguaje • Comentarios intercalados – Para explicar procesos complicados – NO sustituyen ni a la claridad, ni a la sencillez ni a los identificadoresEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  32. 32. PHP Y BASES DE DATOS. Documentación de interfaz□ i18n + L10n Comentarios a nivel de módulos□ POO■ Documentación • Funciones, ficheros, clases. Identifican el módulo.□ Bases de Datos • Informan de su funcionalidad y condiciones de uso – Interfaz. Modelo de «caja negra». • Simultáneos a la codificación, si no previos 32/52 – Ayuda del propio programador – Perdida de utilidad y de contenido si se hacen en diferido Formatos predeterminados – Establecidos por la organización o comunidad de programadores – Propuestos por el lenguaje en lenguajes OO como Java o C# (.NET) – Determinados por las herramientas Procesados con generadores de documentación – Generación automática en formatos múltiples – A partir de los comentarios en el propio códigoEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  33. 33. PHP Y BASES DE DATOS. El formato «Javadoc» (I)□ i18n + L10n • Java: lenguaje de programación orientado a objetos□ POO – Origen 1990 (Sun Microsystems)■ Documentación□ Bases de Datos – Inspirado en C y C++ – Interpretado, multiplataforma – Lenguaje POO de propósito general popular y referente. 33/52 Javadoc: • Herramienta de generación de documentación para Java – Parte del entorno de desarrollo básico (Java Development Kit, JDK) – A partir de comentarios en el código genera HTML (páginas web) – Uniformidad de estilo de TODA la documentación de Java – Mecanismo de comunicación universal → Reutilización • Objetivo: documentar elementos reutilizables – Paquetes, clases, métodos, parámetros, atributos – Documentación de la interfaz para poder reutilizar clasesEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  34. 34. PHP Y BASES DE DATOS. El formato «Javadoc» (II) Compatible C/Java/PHP, pero con dos ** /** Punto en un espacio 2D. * @author <a href="mailto:profe@cesbur">Profe de PLE</a> */ Identificación public class Punto { Formatos HTML Hiperenlaces a código /** Crea un {@link Punto} a partir de sus coordenadas. * @param cartesianas true para cartesianas, false para angulares * @param a abscisa o módulo * @param b ordenada o argumento */ public Punto(boolean cartesianas, double a, double b) { ... } Descripción de la funcionalidad Palabras clave, con @ /** Realiza un desplazamiento horizontal. * @param dx desplazamiento Parámetros necesarios * @return la abscisa tras el desplazamiento */ Resultados public void moverX(double dx) { ... return x; }Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  35. 35. PHP Y BASES DE DATOS. Ejemplo PHP: tablero.php <?php /** @file tablero.php Conversión de coordenadas de ajedrez. */ /** Tamaño del tablero */ define(DIM, 8); $letras = array(a, b, c, d, e, f, g, h); $numeros = array(1, 2, 3, 4, 5, 6, 7, 8); /** * Facilita las coordenadas en el tablero de ajedrez. * a1 es la celda inferior izquierda negra. * @param fila_tabla número de fila, con 0 para la fila superior * @param columna_tabla numero de columna, con 0 a la izquierda * @return el texto correspondiente */ function celda($fila_tabla, $columna_tabla) { return celda_a_letra($fila_tabla, $columna_tabla) . celda_a_numero($fila_tabla, $columna_tabla); } ... ?>Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  36. 36. PHP Y BASES DE DATOS. Doxygen□ i18n + L10n • Generador de documentación libre GPL/GNU□ POO – Multiplataforma: GNU/Linux, MAC OS X, MS Windows■ Documentación□ Bases de Datos – Aplicable a C, C++, Java, C#, PHP, Python y alguno más – Compatible con Javadoc, requiere algún ajuste para C o PHP – Genera ficheros HTML, pero también RTF y LATEX • Operación: 36/52 – Descarga e instalación En Linux está disponible en las distribuciones habituales DOS: Descargar, descomprimir y agregar al PATH. También hay instalador. – En el directorio de código fuente crear el fichero de configuración doxygen -g → Doxyfile Recomendable crear directorios separados: src, bin y docs – Editar el fichero Doxyfile a gusto con un editor de texto – Ejecutando nuevamente doxygen se generan los documentos Genera avisos si encuentra código no documentadoEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  37. 37. PHP Y BASES DE DATOS. Doxyfile: sugerencias□ i18n + L10n – PROJECT_NAME = "Ejemplos OO-PHP"□ POO – PROJECT_NUMBER = 1.0■ Documentación – OUTPUT_DIRECTORY = docs□ Bases de Datos – OUTPUT_LANGUAGE = Spanish – JAVADOC_AUTOBRIEF = YES – RECURSIVE = YES 37/52 – EXTRACT_ALL, EXTRACT_PRIVATE, EXTRACT_STATIC – SOURCE_BROWSER, GENERATE_TREEVIEW = YES – HAVE_DOT, UML_LOOK = YES – GENERATE_LATEX = NO • No genera nada hasta que no se documentan los ficheros – Etiqueta @file al frente de los ficheros deseados – Descripción delante de cada clase, método o función – Descripción de funciones incluyendo @param y @returnEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  38. 38. PHP Y BASES DE DATOS. Reglas de estilo□ i18n + L10n Nuestro objetivo es documentar la funcionalidad□ POO■ Documentación de las funciones: el QUÉ, no CÓMO□ Bases de Datos • Texto concreto y conciso • Evitar calcar el identificador, sino darle más sentido • No repetir contexto: «Función que..» 38/52 • Comenzar con verbo en tercera persona de singular • La primera frase va a los índices: ser muy concretos – Hasta el primer punto . y espacio (para no cortar direcciones de correo) – Podemos ampliar la explicación en oraciones sucesivas, pero teniendo en cuenta que tampoco se busca explicar aquí el algoritmo: el código debe ser autoexplicativo. • No olvidar los comportamientos excepcionales y errores tratados por la función • Debe ser un reflejo de las especificaciones – Anticipo del diseño de pruebas unitarias de caja negraEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  39. 39. PHP Y BASES DE DATOS. Etiquetas Javadoc / Doxygen□ i18n + L10n • Delimitación de comentarios: /** */□ POO■ Documentación • Descripciones: texto.□ Bases de Datos – Permiten HTML básico para formato. • Parámetros de funciones: @param identificador • Valor devuelto: @return (sin identificador) 39/52 • Enlaces internos: – En bloque: @see funcion() / @see #identificador – En línea: {@link funcion()} / {@link #identificador} Entre llaves; se pueden intercalar en cualquier texto • Identificación: @author nombre / @version numero • Ficheros (en Doxygen): @file nombre.ext ContenidoEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  40. 40. PHP Y BASES DE DATOS. Doxygen: instalación□ i18n + L10n GNU Linux / Ubuntu□ POO■ Documentación – Fácil: gestor de paquetes, buscar Doxygen□ Bases de Datos – Opcionalmente instalar Graphviz (dot, genera gráficos) – Acceso por consola de texto $> doxygen 40/52 MS Windows • Descargar y descomprimir Doxygen + Graphviz – Evitar los instaladores si es posible – Elegir nombres de directorios cortos, sin espacios • Ejecutar desde una consola de texto – Agregar a PATH • Sugerencia: – Hacer copia de la «consola de sistema» – Asociar un archivo de comandos: /k archivo.cmd – Configurar PATH y mode en el archivo (windows-1252) – Cambiar tipo de letra: Lucida ConsoleEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  41. 41. PHP Y BASES DE DATOS. PHP + Doxygen en MS Windows (I)Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  42. 42. PHP Y BASES DE DATOS. PHP + Doxygen en MS Windows (II)Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  43. 43. PHP Y BASES DE DATOS Acceso a bases de datos con PDO Red profesional colaborativa del ciclo «Administración de Sistemas Informáticos en Red»
  44. 44. PHP Y BASES DE DATOS. PHP Data Objects (PDO)□ i18n + L10n • Extensión de PHP para acceso a bases de datos.□ POO□ Documentación • Capa de abstracción, independiente del SGBD.■ Bases de Datos – Interface común, parámetros ajustables. – Funcionalidad dependiente del SGBD. Abstracción en el acceso, no en la base de datos. – Requiere activar la extensión pdo_xxxx del gestor, en php.ini 44/52 Verificable con phpinfo() • A partir de PHP 5.1 Wez Furlong, Message Systems – Previamente se empleaban extensiones particulares. – Siguen operativas y en uso. • Tecnología orientada a objetos – Tres clases PDO – Base de datos PDOStatement – Resultados PDOException – IncidenciasEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  45. 45. PHP Y BASES DE DATOS. PDO I: Conexión y desconexión□ i18n + L10n • Conexión = creación del objeto□ POO – Instancia de la case PDO.□ Documentación■ Bases de Datos – Los datos de conexión van en los parámetros al constructor. • Los errores generan excepciones. – La descripción del error va en el texto de la excepción. + Códigos de error ANSI SQLSTATE 45/52 – Se debe capturar con una estructura try-catch. • Desconexión automática – Al anular la referencia al objeto. (1) Instanciación del objeto try { $db = new PDO($dsn, $user, $password, $options); (3) Vigilando la excepción } catch (PDOException $e) { die ("Failed to connect: " . $e->getMessage()); } … (4) Mensaje del error $db=NULL; (2) Anular y cerrarEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  46. 46. PHP Y BASES DE DATOS. PDO II: Consultas□ i18n + L10n Dos estrategias:□ POO□ Documentación • Consulta directa, sin preparación■ Bases de Datos – Consulta de datos: devuelve PDOStatement o FALSE. $consulta=$db->query($sql); – Otras sentencias: devuelve número de filas afectadas o 0. $n=$db->exec($sql); 46/52 – PROTEGER ANTES de comillas y caracteres especiales $sql=$db->quote($texto); – Se recomienda evitarlas en favor de consultas preparadas. • Consulta con preparación – Optimiza para consultas reutilizables con parámetros. – El uso de parámetros protege de inyecciones SQL. $consulta=$db->prepare($sql_p); $consulta->execute(array(…)); Los parámetros se incorporan en la consulta original como «?» o como «:clave» según el array a usar – PDO::prepare() devuelve también PDOStatement.Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  47. 47. PHP Y BASES DE DATOS. Ejemplo PHP: consulta MySQL require_once(conf/config.php); $sql_p = select Name,Code from Country where name like ?; try { // Conexión $fuente = sprintf(mysql:host=%s;dbname=%s, DBHOST, DBNAME); $basededatos = new PDO($fuente, DBUSER, DBPASSWORD); $basededatos->exec(set names utf8); // Consulta $consulta = $basededatos->prepare($sql_p); $consulta->execute(array(S%n)); $resultados = $consulta->fetchAll(); // acceso con buffer // Procesado $nelementos = count($resultados); foreach ($resultados as $fila) { printf("%s - %sn", $fila[Code], $fila[Name]); } } catch (PDOException $e) { // Errores printf(Error en base de datos: %s, $e->getMessage()); } $basededatos = NULL; //CierreEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  48. 48. PHP Y BASES DE DATOS. PDO III: Consultas y resultados□ i18n + L10n Resultados: proceso de PDOStatement□ POO□ Documentación – Las consultas devuelven objetos PDOStatement.■ Bases de Datos – En caso de consultas preparadas hay que ejecutarlas. – Finalmente se recogen o analizan los resultados. • Lectura de TODA la tabla resultante – Desaconsejable en consultas voluminosas 48/52 $resultados=$consulta->fetchAll(); • Lectura por filas/tuplas una a una while (Sfila=$consulta->fetch()) {…}; Acabar o cerrar con closeCursor() antes de otra consulta. • Número de filas/tuplas afectadas $n=$consulta->rowCount(); – Para INSERT, DELETE, UPDATE. Informan del acierto o no. – Con SELECT depende de la base de datos: no hay garantía. • Se puede recorrer directamente con «foreach». Gracias a que implementa la interface Traversable.Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  49. 49. PHP Y BASES DE DATOS. Ejemplo PHP: entrada require_once(conf/config.php); $sql_p = update Access set User=?; try { // Conexión $fuente = sprintf(mysql:host=%s;dbname=%s, DBHOST, DBNAME); $basededatos = new PDO($fuente, DBUSER, DBPASSWORD); $basededatos->exec(set names utf8); // Consulta $consulta = $basededatos->prepare($sql_p); $resultado = $consulta->execute(array(ASIR2012)); // Procesado $mensaje = ($resultado) ? "SÍ" : "NO"; printf("Actualización %s realizadan", $mensaje); } catch (PDOException $e) { // Errores printf(Error en base de datos: %s, $e->getMessage()); } $basededatos = NULL; //CierreEnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  50. 50. PHP Y BASES DE DATOS. Referencias Sintes, B. (2011, IES Abastos). Páginas web con PHP http://www.mclibre.org/consultar/php/ Simpson, A. (WebCollab, consulta 12/2011) PHP and UTF-8 Howto http://webcollab.sourceforge.net/unicode.html PHP (The PHP Group, consulta 12/2011) PHP Manual – Clases y objetos http://www.php.net/manual/es/oop5.intro.php Salinas, P. (Univ. Chile, consulta 12/2011) Tutorial de UML – Modelo de clases http://www.dcc.uchile.cl/~psalinas/uml/modelo.html Furlong, W. (Message Systems, consulta 1/2012) PHP Data Objects http://www.slideshare.net/wezfurlong/php-data-objects Bibliografía actualizada en delicious: http://www.delicious.com/dhmartin/IW-ASIREnero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  51. 51. PHP Y BASES DE DATOS. Licencia Este material está disponible bajo una Licencia Creative Commons, http://creativecommons.org/licenses/by-nc-sa/3.0/es/Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  52. 52. PHP Y BASES DE DATOS. ¿Dudas o cuestiones?Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»

×