SlideShare ist ein Scribd-Unternehmen logo
1 von 52
Downloaden Sie, um offline zu lesen
Implantación de
 Aplicaciones Web

UT 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 –
Proyecto ARCE

   David H. Martín Alonso
                                             IES José Luis Sampedro
    CIFP Juan de Colonia
                                               Tres Cantos (Madrid)
           Burgos




José 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»
PHP Y BASES DE DATOS.



                                 Contenidos
                        Internacionalización, localización
                        Programación orientada a objetos
                        Documentación
                        Acceso a bases de datos con PDO




Enero de 2013                                       ARCE: «Administración de Sistemas Informáticos en Red»
PHP Y BASES DE DATOS



  Internacionalización, localización




                         Red profesional colaborativa del ciclo
                   «Administración de Sistemas Informáticos en Red»
PHP Y BASES DE DATOS.



                Programación orientada a objetos


                                ASCII
                               CP 850
                              Win-1252
                             ISO-8859-1
                               Unicode
                               UTF-8



Enero de 2013                             ARCE: «Administración de Sistemas Informáticos en Red»
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 datos
Enero de 2013                                                      ARCE: «Administración de Sistemas Informáticos en Red»
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»
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_encoding



Enero de 2013                                             ARCE: «Administración de Sistemas Informáticos en Red»
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»
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 texto
Enero de 2013                                                        ARCE: «Administración de Sistemas Informáticos en Red»
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»
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»
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»
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»
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
                               descendientes
Enero de 2013                                                     ARCE: «Administración de Sistemas Informáticos en Red»
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, Python




Enero de 2013                                              ARCE: «Administración de Sistemas Informáticos en Red»
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 5




Enero de 2013                                                     ARCE: «Administración de Sistemas Informáticos en Red»
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»
PHP Y BASES DE DATOS.



                Programación orientada a objetos


                                POO
                                UML
                               Clases
                               Objetos
                              Atributos
                              Métodos



Enero de 2013                             ARCE: «Administración de Sistemas Informáticos en Red»
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 objetos




Enero de 2013                                                     ARCE: «Administración de Sistemas Informáticos en Red»
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
                          –   Funciones




Enero de 2013                                                     ARCE: «Administración de Sistemas Informáticos en Red»
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»
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étodo
Enero de 2013                                                                       ARCE: «Administración de Sistemas Informáticos en Red»
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»
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»
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»
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»
PHP Y BASES DE DATOS



  Documentación en PHP: Doxygen




                       Red profesional colaborativa del ciclo
                 «Administración de Sistemas Informáticos en Red»
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 inmediatamente
Enero de 2013                                                      ARCE: «Administración de Sistemas Informáticos en Red»
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 usuario
Enero de 2013                                                     ARCE: «Administración de Sistemas Informáticos en Red»
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
                                identificadores

Enero de 2013                                                     ARCE: «Administración de Sistemas Informáticos en Red»
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ódigo
Enero de 2013                                                      ARCE: «Administración de Sistemas Informáticos en Red»
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 clases
Enero de 2013                                                       ARCE: «Administración de Sistemas Informáticos en Red»
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»
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»
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 documentado

Enero de 2013                                                    ARCE: «Administración de Sistemas Informáticos en Red»
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 @return
Enero de 2013                                                   ARCE: «Administración de Sistemas Informáticos en Red»
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 negra
Enero de 2013                                                          ARCE: «Administración de Sistemas Informáticos en Red»
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 Contenido

Enero de 2013                                                       ARCE: «Administración de Sistemas Informáticos en Red»
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 Console

Enero de 2013                                                       ARCE: «Administración de Sistemas Informáticos en Red»
PHP Y BASES DE DATOS.



         PHP + Doxygen en MS Windows (I)




Enero de 2013                  ARCE: «Administración de Sistemas Informáticos en Red»
PHP Y BASES DE DATOS.



       PHP + Doxygen en MS Windows (II)




Enero de 2013                ARCE: «Administración de Sistemas Informáticos en Red»
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»
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 – Incidencias


Enero de 2013                                                       ARCE: «Administración de Sistemas Informáticos en Red»
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 cerrar

Enero de 2013                                                             ARCE: «Administración de Sistemas Informáticos en Red»
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»
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; //Cierre
Enero de 2013                                            ARCE: «Administración de Sistemas Informáticos en Red»
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»
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; //Cierre

Enero de 2013                                            ARCE: «Administración de Sistemas Informáticos en Red»
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-ASIR




Enero de 2013                                                         ARCE: «Administración de Sistemas Informáticos en Red»
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»
PHP Y BASES DE DATOS.



                        ¿Dudas o cuestiones?




Enero de 2013                            ARCE: «Administración de Sistemas Informáticos en Red»

Weitere ähnliche Inhalte

Andere mochten auch

LM-UT7: Almacenamiento XML
LM-UT7: Almacenamiento XML LM-UT7: Almacenamiento XML
LM-UT7: Almacenamiento XML David Martin
 
LM-UT4: Sindicación de contenidos
LM-UT4: Sindicación de contenidosLM-UT4: Sindicación de contenidos
LM-UT4: Sindicación de contenidosDavid Martin
 
LM-UT6: Transformaciones XML
LM-UT6: Transformaciones XML LM-UT6: Transformaciones XML
LM-UT6: Transformaciones XML David Martin
 
LM-UT1: Lenguajes de marcas
LM-UT1: Lenguajes de marcas LM-UT1: Lenguajes de marcas
LM-UT1: Lenguajes de marcas David Martin
 
LM-UT5: DTD, XML Schema
LM-UT5: DTD, XML Schema LM-UT5: DTD, XML Schema
LM-UT5: DTD, XML Schema David Martin
 
LM-UT8: Sistemas de Gestión empresarial
LM-UT8: Sistemas de Gestión empresarialLM-UT8: Sistemas de Gestión empresarial
LM-UT8: Sistemas de Gestión empresarialDavid Martin
 
Taller: «Gráficos en el Aula»
Taller: «Gráficos en el Aula»Taller: «Gráficos en el Aula»
Taller: «Gráficos en el Aula»David Martin
 

Andere mochten auch (15)

LM-UT7: Almacenamiento XML
LM-UT7: Almacenamiento XML LM-UT7: Almacenamiento XML
LM-UT7: Almacenamiento XML
 
LM-UT3: CSS
LM-UT3: CSS LM-UT3: CSS
LM-UT3: CSS
 
LM-UT2: HTML
LM-UT2: HTML LM-UT2: HTML
LM-UT2: HTML
 
Ple Ut8
Ple Ut8Ple Ut8
Ple Ut8
 
Burgo Red
Burgo RedBurgo Red
Burgo Red
 
Ethnet
EthnetEthnet
Ethnet
 
LM-UT4: Sindicación de contenidos
LM-UT4: Sindicación de contenidosLM-UT4: Sindicación de contenidos
LM-UT4: Sindicación de contenidos
 
LM-UT6: Transformaciones XML
LM-UT6: Transformaciones XML LM-UT6: Transformaciones XML
LM-UT6: Transformaciones XML
 
LM-UT1: Lenguajes de marcas
LM-UT1: Lenguajes de marcas LM-UT1: Lenguajes de marcas
LM-UT1: Lenguajes de marcas
 
Plataformas web
Plataformas webPlataformas web
Plataformas web
 
Inkscape
InkscapeInkscape
Inkscape
 
LM-UT5: DTD, XML Schema
LM-UT5: DTD, XML Schema LM-UT5: DTD, XML Schema
LM-UT5: DTD, XML Schema
 
LM-UT8: Sistemas de Gestión empresarial
LM-UT8: Sistemas de Gestión empresarialLM-UT8: Sistemas de Gestión empresarial
LM-UT8: Sistemas de Gestión empresarial
 
Taller: «Gráficos en el Aula»
Taller: «Gráficos en el Aula»Taller: «Gráficos en el Aula»
Taller: «Gráficos en el Aula»
 
La Aldea Global
La Aldea GlobalLa Aldea Global
La Aldea Global
 

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

Ähnlich wie IW-UTXX: Programación web en PHP con bases de datos (20)

Actividad 1
Actividad 1Actividad 1
Actividad 1
 
python programming learning
python programming learningpython programming learning
python programming learning
 
Curso introduccionphp sql
Curso introduccionphp sqlCurso introduccionphp sql
Curso introduccionphp sql
 
Guiacursophp sql
Guiacursophp sqlGuiacursophp sql
Guiacursophp sql
 
Desarrollando un API con REST
Desarrollando un API con RESTDesarrollando un API con REST
Desarrollando un API con REST
 
Presentación1
Presentación1Presentación1
Presentación1
 
Presentación1
Presentación1Presentación1
Presentación1
 
Presentación1
Presentación1Presentación1
Presentación1
 
Presentación1
Presentación1Presentación1
Presentación1
 
Presentación1
Presentación1Presentación1
Presentación1
 
Presentación1
Presentación1Presentación1
Presentación1
 
Presentación1
Presentación1Presentación1
Presentación1
 
Interactivo norberto
Interactivo norbertoInteractivo norberto
Interactivo norberto
 
Web semántica
Web semántica Web semántica
Web semántica
 
Hx c21
Hx c21Hx c21
Hx c21
 
Internet.pdf
Internet.pdfInternet.pdf
Internet.pdf
 
Koha biblioteca nacional v3
Koha biblioteca nacional v3Koha biblioteca nacional v3
Koha biblioteca nacional v3
 
Semana 7 protocolos ip
Semana 7 protocolos ipSemana 7 protocolos ip
Semana 7 protocolos ip
 
Sgbd mongodb
Sgbd   mongodbSgbd   mongodb
Sgbd mongodb
 
Web Semántica de la teoría a la práctica: lecciones aprendidas en ambientes p...
Web Semántica de la teoría a la práctica: lecciones aprendidas en ambientes p...Web Semántica de la teoría a la práctica: lecciones aprendidas en ambientes p...
Web Semántica de la teoría a la práctica: lecciones aprendidas en ambientes p...
 

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

  • 1. Implantación de Aplicaciones Web UT 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. Proyecto ARCE David H. Martín Alonso IES José Luis Sampedro CIFP Juan de Colonia Tres Cantos (Madrid) Burgos José 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. PHP Y BASES DE DATOS. Contenidos Internacionalización, localización Programación orientada a objetos Documentación Acceso a bases de datos con PDO Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 4. PHP Y BASES DE DATOS Internacionalización, localización Red profesional colaborativa del ciclo «Administración de Sistemas Informáticos en Red»
  • 5. PHP Y BASES DE DATOS. Programación orientada a objetos ASCII CP 850 Win-1252 ISO-8859-1 Unicode UTF-8 Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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 datos Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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. 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_encoding Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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. 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 texto Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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. 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. 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. 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. 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 descendientes Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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, Python Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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 5 Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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. PHP Y BASES DE DATOS. Programación orientada a objetos POO UML Clases Objetos Atributos Métodos Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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 objetos Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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 – Funciones Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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. 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étodo Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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. 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. 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. 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. PHP Y BASES DE DATOS Documentación en PHP: Doxygen Red profesional colaborativa del ciclo «Administración de Sistemas Informáticos en Red»
  • 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 inmediatamente Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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 usuario Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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 identificadores Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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ódigo Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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 clases Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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. 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. 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 documentado Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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 @return Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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 negra Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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 Contenido Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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 Console Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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. PHP Y BASES DE DATOS. PHP + Doxygen en MS Windows (II) Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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. 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 – Incidencias Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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 cerrar Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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. 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; //Cierre Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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. 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; //Cierre Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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-ASIR Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»
  • 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. PHP Y BASES DE DATOS. ¿Dudas o cuestiones? Enero de 2013 ARCE: «Administración de Sistemas Informáticos en Red»