eugenia bahit--poo y mvc en php

Upload: ramon-villa

Post on 14-Apr-2018

232 views

Category:

Documents


1 download

TRANSCRIPT

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    1/66

    POO y MVC en PHPEl paradigma de la Programacin Orientada a Objetos en

    PHP y el patrn de arquitectura de Software MVC

    porEugenia Bahit

    http://eugeniabahit.blogspot.com

    http://eugeniabahit.blogspot.com/http://eugeniabahit.blogspot.com/
  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    2/66

    AVISO LEGAL

    POO y MVC en PHP de Eugenia

    Bahit se distribuye bajo una LicenciaCreative Commons Atribucin-

    NoComercial-SinDerivadas 3.0

    Unported.

    Usted es libre de:

    Compartir, copiar, distribuir, ejecutar y comunicar pblicamente la obra.

    Bajo las condiciones siguientes:

    Atribucin. Debe reconocer los crditos de la obra de la maneraespecificada por el autor o el licenciante (pero no de una manera que sugiera

    que tiene su apoyo o que apoyan el uso que hace de su obra).

    No Comercial. No puede utilizar esta obra para fines comerciales.

    Sin Obras Derivadas. No se puede alterar, transformar o generar una obraderivada a partir de esta obra.

    Ms informacin de esta licencia en:

    http://creativecommons.org/licenses/by-nc-nd/2.5/ar/

    http://eugeniabahit.blogspot.com/http://eugeniabahit.blogspot.com/http://creativecommons.org/licenses/by-nc-nd/3.0/http://creativecommons.org/licenses/by-nc-nd/3.0/http://creativecommons.org/licenses/by-nc-nd/3.0/http://creativecommons.org/licenses/by-nc-nd/2.5/ar/http://eugeniabahit.blogspot.com/http://eugeniabahit.blogspot.com/http://creativecommons.org/licenses/by-nc-nd/3.0/http://creativecommons.org/licenses/by-nc-nd/3.0/http://creativecommons.org/licenses/by-nc-nd/3.0/http://creativecommons.org/licenses/by-nc-nd/2.5/ar/
  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    3/66

    POO y MVC en PHP Eugenia Bahit

    ndice de contenidos

    Antes de comenzar con el libro............................................................................................................................................ ... 6Objetivo del libro................................................................................................................................................................... .6

    Requisitos previos.............................................................................................................................................................6

    A quines est dirigido este libro?...............................................................................................................................6

    El por qu? de este libro y Mi Dedicatoria........................................................................................................................6

    Contenido del libro.................................................................................................................................................................7

    Estructura del libro...........................................................................................................................................................7

    Entender el contenido diferenciado ............................................................................................................................7

    Marco terico (contenido propio)........................................................................................................................... .8

    Marco terico (cita de terceros)...............................................................................................................................8

    Ejemplo prctico (cdigo fuente).............................................................................................................................8

    Metforas (comparacin con la vida real)..............................................................................................................8

    Sugerencias de estilo..................................................................................................................................................8

    Ejercicios de autoevaluacin.....................................................................................................................................9

    Programacin real.......................................................................................................................................................9

    Respuestas a preguntas frecuentes........................................................................................................................9

    Introduccin a la programacin orientada a objetos (POO)................................................................................ ......... 11Elementos de la POO...........................................................................................................................................................11

    Clase..................................................................................................................................................................................11

    Objeto...............................................................................................................................................................................11

    Mtodo.............................................................................................................................................................................11Evento y Mensaje........................................................................................................................................................... .11

    Propiedades y atributos................................................................................................................................................11

    Caractersticas conceptuales de la POO..........................................................................................................................12

    Abstraccin......................................................................................................................................................................12

    Encapsulamiento............................................................................................................................................................12

    Modularidad.....................................................................................................................................................................12

    Ocultacin (aislamiento)...............................................................................................................................................12

    Polimorfismo...................................................................................................................................................................12

    Herencia............................................................................................................................................................................12

    Recoleccin de basura...................................................................................................................................................12

    Programacin Orientada a Objetos en PHP 5................................................................................................................... 14Clases y Objetos en PHP 5..................................................................................................................................................14

    Definicin de Clases.......................................................................................................................................................14

    Declaracin de Clases abstractas................................................................................................................................14

    Herencia de Clases.........................................................................................................................................................15

    Declaracin de Clases finales En PHP.........................................................................................................................15

    Qu tipo de clase declarar?............................................................................................................................................. ..15

    Objetos en PHP 5.................................................................................................................................................................15

    Instanciar una clase........................................................................................................................................................15

    Propiedades en PHP 5.........................................................................................................................................................16

    Propiedades pblicas.....................................................................................................................................................16

    Propiedades privadas.....................................................................................................................................................16

    3

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    4/66

    POO y MVC en PHP Eugenia Bahit

    Propiedades protegidas................................................................................................................................................16

    Propiedades estticas....................................................................................................................................................17

    Accediendo a las propiedad de un objeto.......................................................................................................................17

    Acceso a variables desde el mbito de la clase.........................................................................................................17

    Acceso a variables desde el exterior de la clase..................................................................................................... ..17Constantes de Clase.............................................................................................................................................................18

    Mtodos en PHP 5................................................................................................................................................................18

    Mtodos pblicos, privados, protegidos y estticos...............................................................................................19

    Mtodos abstractos.......................................................................................................................................................19

    Mtodos mgicos en PHP 5..........................................................................................................................................20

    El Mtodo Mgico __construct()............................................................................................................................20

    El mtodo mgico __destruct()..............................................................................................................................20

    Otros mtodos mgicos...........................................................................................................................................21

    Ejercicios Prcticos......................................................................................................................................................... ......... 22Soluciones a los ejercicios 1 y 2.........................................................................................................................................25Ejercicio N1....................................................................................................................................................................25

    Ejercicio N2....................................................................................................................................................................25

    Programacin Real Orientada a Objetos en PHP........................................................................................................... .. 26Archivos fuente del ABM de Usuarios..............................................................................................................................26

    Archivo db_abstract_model.php..................................................................................................................................26

    Archivo usuarios_model.php........................................................................................................................................27

    Archivo abm_example.php...........................................................................................................................................28

    Explicando el cdigo en el contexto de la POO: La mejor forma de aprender y comprender..............................29

    Respuestas a Preguntas Frecuentes sobre el cdigo..............................................................................................29

    1. Respuestas a preguntas frecuentes de la clase DBAbstractModel............................................................29

    2. Respuestas a preguntas sobre la clase Usuario..............................................................................................30

    3. Respuestas a preguntas sobre el archivo de instancias................................................................................31

    Introduccin al patrn Arquitectnico MVC.......................................................................................................... .......... . 33Introduccin a la Arquitectura de Software....................................................................................................................33

    Qu es la arquitectura de software?...................................................................................................................... ...33

    Tendencias de la Arquitectura de Software..............................................................................................................33

    Caractersticas de la Arquitectura de Software: Atributos de calidad.................................................................34

    Atributos de calidad que pueden observarse durante la ejecucin del software........................................34Atributos de calidad inherentes al proceso de desarrollo del software........................................................34

    De lo general a lo particular: del estilo arquitectnico al patrn de diseo.............................................................35

    Relacin y Diferencia.....................................................................................................................................................35

    El Patrn Arquitectnico modelo-vista-controlador (MVC) ................................................................................... .....35

    Aclarciones previas.........................................................................................................................................................35

    Qu es el patrn MVC?.................................................................................................................................................36

    Cmo funciona el patrn MVC?..................................................................................................................................36

    El Patrn MVC en PHP............................................................................................................................................................ . 40

    El modelo...............................................................................................................................................................................40Interfaces en PHP: un nuevo concepto para crear modelos..................................................................................40

    Diferencia entre Interfaces y Clases abstractas..................................................................................................41

    4

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    5/66

    POO y MVC en PHP Eugenia Bahit

    Lo que NO deben hacer las insterfaces................................................................................................................42

    La vista....................................................................................................................................................................................42

    Vista: la interfaz grfica.................................................................................................................................................43

    La Lgica de la Vista.......................................................................................................................................................44

    Primer paso: crear un diccionario de datos..........................................................................................................44Segundo paso: obtener la plantilla HTML............................................................................................................44

    Tercer paso: reemplazar el contenido ..................................................................................................................44

    Cuarto paso: mostrar el contenido final al usuario............................................................................................45

    El controlador.......................................................................................................................................................................45

    Primer paso: identificar el modelo........................................................................................................................48

    Segundo paso: invocar al modelo efectuando los cambios adecuados..........................................................49

    Tercer paso: enviar la informacin a la vista........................................................................................................49

    Ejercicios Prcticos......................................................................................................................................................... ......... 50

    Soluciones a los ejercicios 3 y 4.........................................................................................................................................53Ejercicio N3....................................................................................................................................................................53

    Ejercicio N4....................................................................................................................................................................53

    Programacin Real Con el patrn MVC............................................................................................................................... 54Estructura de directorios....................................................................................................................................................54

    Archivos del Modelo ...........................................................................................................................................................55

    Archivo ./core/db_abstract_model.php......................................................................................................................55

    Modificaciones incorporadas..................................................................................................................................55

    Cdigo fuente del archivo.......................................................................................................................................55

    Archivo ./usuarios/model.php......................................................................................................................................56

    Modificaciones incorporadas..................................................................................................................................56

    Cdigo fuente del archivo.......................................................................................................................................56

    Archivos de la Vista..............................................................................................................................................................58

    Archivos de la GUI...........................................................................................................................................................58

    Archivo ./site_media/html/usuario_template.html............................................................................................59

    Archivo ./site_media/html/usuario_agregar.html..............................................................................................59

    Archivo ./site_media/html/usuario_borrar.html.................................................................................................60

    Archivo ./site_media/html/usuario_buscar.html.................................................................................................60

    Archivo ./site_media/html/usuario_modificar.html...........................................................................................60

    Archivo ./site_media/css/base_template.css.......................................................................................................60

    Archivo ./usuarios/view.php.........................................................................................................................................62El controlador.......................................................................................................................................................................63

    Archivo ./usuarios/controller.php................................................................................................................................63

    Archivos de configuracin complementarios.................................................................................................................65

    Archivo ./usuarios/constants.php................................................................................................................................65

    Archivo .htaccess............................................................................................................................................................65

    Nota Final........................................................................................................................................................................ ......... .. 66

    5

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    6/66

    POO y MVC en PHP Eugenia Bahit

    Antes de comenzar con el libro

    Antes de comenzar con la lectura puntual sobre POO y MVC en PHP, hago meritorionotar ciertas cuestiones que considero deben contemplarse a fin de lograr un mejorentendimiento de lo expuesto.

    Objetivo del libro

    El objetivo de este libro, es dar una introduccin general a conceptos bsicos de laprogramacin como lo son, el paradigma de la programacin orientada a objetos y elpatrn arquitectnico MVC (modelo, vista, controlador), a la vez de intentar introducirestos conceptos, en la programacin especfica del lenguaje PHP.

    Requisitos previosPara poder entender este libro, los requisitos previos que debe tener el lector, no sonmuchos. Recomiendo que se tengan conocimientos bsicos del lenguaje PHP as comola facilidad para entender cdigo HTML bsico (se utilizar HTML Transitional 4.0 enalgunos ejemplos, evitando el uso de XHTML, a fin de que programadores sin experienciaen el diseo y maquetado de sitios Web, puedan comprender ms fcilmente losejemplos utilizados).

    A quines est dirigido este libro?Este libro est dirigido principalmente, a programadores PHP que quieran salir de la

    programacin estructurada para insertarse en la programacin orientada a objetos y, aprogramadores de otros lenguajes que quieran comenzar a insertarse en la POO enPHP y que cuenten con mnimos conocimientos de este lenguaje.

    El por qu? de este libro y Mi Dedicatoria

    Mi frase de cabecera es el por qu de las cosas es relativo ya que no tiene forma de sercomprobado. As que se me hace muy difcil explicar un por qu. Solo puedo decircmo fue que se me ocurri escribirlo.

    Perd la cuenta de la cantidad de programadores con los que he trabajado. Han sidomuchsimos en los ltimos 15 aos de mi vida. Me ha tocado trabajar con excelentesprogramadores y con unos pocos no tan buenos. Pero hay algo, que he notado en unagran parte de progrmadores, con los que tal vez, no me ha tocado trabajar en formadirecta, pero s, tener que continuar desarrollando algo ya empezado por ellos omodificarlo. Y sto que he notado y me ha llamado mucho la atencin, es que:

    Se usan elementos de la programacin orientada a objetos, con la falsa creenciade que escribiendo una clase ya se est programando orientado a objetos

    Se desconoce por completo o no se logra entender del todo, la diferencia entreestilo arquitectnico, patrn arquitectnico y patrn de diseo, provocandoen consecuencia, el desaprovechamiento o mal uso, de patrones arquitectnicos

    6

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    7/66

    POO y MVC en PHP Eugenia Bahit

    como MVC desencadenando as, en una arquitectura de software deficiente

    Las alternativas que me quedaban eran dos:

    1. No hacer nada

    2. Transmitir a otros programadores, todo lo que haba aprendido, para quepudiesen implementarlo si ese fuese su deseo

    Por lgica y sin dudarlo ni tener que pensarlo demasiado, eleg la segunda opcin.Porque estoy segura que el conocimiento debe ser transmitido y no se debe escatimaren su difusin. Pues no me interesa hacerme eco de la competitividad que invadevarios mbitos de la vida. Por el contrario, prefiero seguir el ejemplo de aquellos, miscolegas, que lo han brindado todo al saber general . Y es por ello, que este libro, lodedico a todos ellos, a los creadores de MastrosDelWeb.com1y ForosDelWeb.com y enespecial, a mis dos grandes colegas, de quienes he aprendido gran parte de lo que hoyse:

    a la barcelonesa Helena Heidenreich (aka: tunait2), gran colaboradora del foroJavaScript de FDW

    y al madrileo Miguel ngel lvarez, fundador y director del portal deprogramacin, DesarrolloWeb.com3.

    Contenido del libro

    A fin de lograr cumplir con los objetivos propuestos, este libro ha sido diseado con unaestructura esquemtica y seguiendo normas de estilo a fin de diferenciar su contenido.

    Estructura del libroEste libro se encuentra dividido en 4 captulos donde dos de ellos, introducen aconceptos bsicos de la POO y el patrn MVC (en general) y los otros dos, colocan a laPOO y al patrn MVC en el contexto del lenguaje PHP.

    Entender el contenido diferenciado

    Este libro no pretende ser un compendio de conceptos meramente tericos. A fin dealcanzar un abordaje ms preciso y fcilmente entendible, se ha divido el libro en 7tipificaciones de contenido diferenciadas:

    1. marco terico (contenido propio y citas de terceros)

    2. ejemplo prctico (cdigo fuente de ejemplo)

    3. metforas (comparacin con ejemplos de la vida real tomando esta tcnica deun principio bsico de Extreme Programming)

    4. sugerencias de estilo (reglas de estilo sugeridas para la programacin en PHP)

    1 http://www.maestrosdelweb.com/

    2 tunait nos ofrece una de las mejores colecciones de cdigos JavaScript, en su sitio Web http://tunait.com/javascript/3 http://www.desarrolloweb.com Portal de desarrollo Web y programacin, de la comunidad hispanoparlante

    7

    http://www.maestrosdelweb.com/http://tunait.com/javascript/http://www.desarrolloweb.com/http://tunait.com/javascript/http://www.desarrolloweb.com/http://www.maestrosdelweb.com/
  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    8/66

    POO y MVC en PHP Eugenia Bahit

    5. ejercicios de autoevaluacin

    6. programacin real (ejemplos con cdigos fuente reales)

    7. preguntas a respuestas frecuentes

    Marco terico (contenido propio)Texto general del libro.

    Marco terico (cita de terceros)Las citas presentan el siguiente formato:

    Esto es una cita textual de terceros. La fuente se encuentra al pie de pgina.

    Ejemplo prctico (cdigo fuente)

    El cdigo fuente se encuentra con una tipografa monoespaciada y con la sintaxis dellenguaje coloreada4.

    class Usuario {# Propiedadespublic$nombre;

    # Mtodospublicfunction set_usuario(){

    $this->nombre = 'Juan'; }

    }

    Metforas (comparacin con la vida real)A fin de ejemplificar con facilidad un concepto netamente terico, se darn ejemplosutilizando hechos de la vida cotideana, que puedan asemejarse al concepto que se estexplicando. Estas metforas, se presentarn con un diseo como el siguiente:

    Esto es una metfora.

    Si no tengo el cono, soy un ejemplo de la vida

    real, pero no soy una metfora.

    Sugerencias de estiloA diferencia de otros lenguajes de programacin como Python, por ejemplo, PHP notiene una gua de prcticas recomendadas o sugerencias de estilo. Esto, hace que muchasveces, cada programador le de al cdigo fuente un toque caracterstico. Si bien es unrasgo de personalidad tal vez admirable, en la prctica, provoca que sea difcil modificarel cdigo fuente escrito previamente por otro programador.

    A fin de proponer una alternativa para solucionar este inconveniente y basndome en elprincipio de propiedad colectiva de Extreme Programming as como en la tcnica de

    4 Este libro ha sido editado utilizando OpenOffice Writer 3.2 con el plug-in COOoder para el coloreado de sintaxis

    8

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    9/66

    POO y MVC en PHP Eugenia Bahit

    establecimiento de pautas de estilo que hagan un cdigo homogneo, a lo largo del libroir sugiriendo algunas reglas de estilo segn surjan, cuyo finalidad tiende a:

    1. hacer los cdigos fuente ms intuitivos;

    2. escribir cdigos fuente fcilmente legibles.

    Las Sugerencias de Estilo presenta un formato similar al siguiente:

    Reglas de estilosugeridasEsto es una regla de estilosugerida en referencia al temaque se est tratando.

    Ejercicios de autoevaluacinAl final de los captulos II y IV, hay una breve serie de ejercicios, cuya finalidad, es la deasimilar los conocimientos adquiridos en los captulos anteriores. Las soluciones a dichosejercicios, se encuentran al final de cada uno de ellos.

    Programacin realTras los ejercicios presentados al finalizar los captulos II y IV, sepodr encontrar cdigo fuente de casos reales. Dichos cdigos,pretenden dar al lector, una nocin ms prctica de los temas quese han tratado, aplicndola a la vida cotideana de un desarrollador.Los encontrars fcilmente identificando el cono de PHP como elque se muestra a la izquierda de este prrafo.

    Respuestas a preguntas frecuentesAqu encontrars todas las preguntas sobre los cdigos fuente que seencuentren en la seccin programacin real. Dicha seccin, seencuentra identificada con el icono que se muestra a la derecha deeste prrafo.

    Hecha estas aclaraciones, ahora...A programar!

    9

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    10/66

    POO y MVC en PHP Eugenia Bahit

    CAPTULO IIntroduccin a la Programacin Orientada a Objetos (POO)

    10

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    11/66

    POO y MVC en PHP Eugenia Bahit

    Introduccin a la programacin orientada a objetos (POO)

    La POO es un paradigma de programacin (o tcnica de programacin) que utilizaobjetos e interacciones en el diseo de un sistema.

    Elementos de la POO

    La POO est compuesta por una serie de elementos que se detallan a continuacin.

    ClaseUna clase es un modelo que se utiliza para crear objetos que comparten un mismocomportamiento, estado e identidad.

    MetforaPersona es la metfora de una clase (la abstraccin deJuan, Pedro, Ana y Mara), cuyo comportamientopuede ser caminar, correr, estudiar, leer, etc. Puedeestar en estado despierto, dormido, etc. Suscaractersticas (propiedades) pueden ser el color de ojos,color de pelo, su estado civil, etc.

    class Persona {# Propiedades# Mtodos

    }

    ObjetoEs una entidad provista de mtodos o mensajes a los cuales responde (comportamiento);atributos con valores concretos (estado); y propiedades (identidad).

    $persona=new Persona();/*

    El objeto, ahora, es $persona,que se ha creado siguiendo el modelo de la clase Persona

    */

    MtodoEs el algoritmo asociado a un objeto que indica la capacidad de lo que ste puede hacer.

    function caminar(){#...

    }

    Evento y MensajeUn evento es un suceso en el sistema mientras que un mensaje es la comunicacin delsuceso dirigida al objeto.

    Propiedades y atributosLas propiedades y atributos, son variables que contienen datos asociados a un objeto.

    $nombre= 'Juan';$edad= '25 aos';

    $altura= '1,75 mts';

    11

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    12/66

    POO y MVC en PHP Eugenia Bahit

    Caractersticas conceptuales de la POO

    La POO debe guardar ciertas caractersticas que la identifican y diferencian de otrosparadigmas de programacin. Dichas caractersticas se describen a continuacin.

    AbstraccinAislacin de un elemento de su contexto. Define las caractersticas esenciales de unobjeto.

    EncapsulamientoRene al mismo nivel de abstraccin, a todos los elementos que puedan considerarsepertenecientes a una misma entidad.

    Modularidad

    Caracterstica que permite dividir una aplicacin en varias partes ms pequeas(denominadas mdulos), independientes unas de otras.

    Ocultacin (aislamiento)Los objetos estn aislados del exterior, protegiendo a sus propiedades para no sermodificadas por aquellos que no tengan derecho a acceder a las mismas.

    PolimorfismoEs la capacidad que da a diferentes objetos, la posibilidad de contar con mtodos,propiedades y atributos de igual nombre, sin que los de un objeto interfieran con el de

    otro.

    HerenciaEs la relacin existente entre dos o ms clases, donde una es la principal (madre) y otrasson secundarias y dependen (heredan) de ellas (clases hijas), donde a la vez, los objetosheredan las caractersticas de los objetos de los cuales heredan.

    Recoleccin de basuraEs la tcnica que consiste en destruir aquellos objetos cuando ya no son necesarios,liberndolos de la memoria.

    12

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    13/66

    POO y MVC en PHP Eugenia Bahit

    CAPTULO IIProgramacin Orientada a Objetos en PHP 5

    13

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    14/66

    POO y MVC en PHP Eugenia Bahit

    Programacin Orientada a Objetos en PHP 5

    En este captulo veremos como aplicar los conceptos de la POO en el entorno dellenguaje PHP 5+.

    Clases y Objetos en PHP 5

    Definicin de ClasesSegn el Manual Oficial de PHP, una Clase es:

    [] una coleccin de variables y funciones que trabajan con estas variables. Las variables sedefinen utilizandovary las funciones utilizandofunction [...]5

    Para definir una clase, el Manual Oficial de PHP, contina diciendo:

    [] La definicin bsica de clases comienza con la palabra clave class, seguido por unnombre de clase, continuado por un par de llaves que encierran las definiciones de laspropiedades y mtodos pertenecientes a la clase. El nombre de clase puede ser cualquieretiqueta vlida que no sea una palabra reservada de PHP. Un nombre vlido de clasecomienza con una letra o un guin bajo, seguido de la cantidad de letras, nmeros o guionesbajos que sea. []6

    Veamos un ejemplo de definicin de clase:

    class NombreDeMiClase {#...

    }

    Reglas de EstilosugeridasUtilizar CamelCase para elnombre de las clases.

    La llave de apertura en la misma lnea que elnombre de la clase, permite una mejorlegibilidad del cdigo.

    Declaracin de Clases abstractasLas clases abstractas son aquellas que no necesitan ser instanciadas pero sin embargo,sern heredadas en algn momento. Se definen anteponiendo la palabra clave abstractaclass:

    abstract class NombreDeMiClaseAbstracta {#...

    }

    Este tipo de clases, ser la que contenga mtodos abstractos (que veremos msadelante) y generalmente, su finalidad, es la de declarar clases genricas que necesitanser declaradas pero a las cuales, no se puede otorgar una definicin precisa (de eso, seencargarn las clases que la hereden).

    5 Fuente de la cita:http://php.net/manual/es/keyword.class.php

    6 Fuente de la cita:http://www.php.net/manual/es/language.oop5.basic.php

    14

    http://php.net/manual/es/keyword.class.phphttp://php.net/manual/es/keyword.class.phphttp://www.php.net/manual/es/language.oop5.basic.phphttp://www.php.net/manual/es/language.oop5.basic.phphttp://php.net/manual/es/keyword.class.phphttp://www.php.net/manual/es/language.oop5.basic.php
  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    15/66

    POO y MVC en PHP Eugenia Bahit

    Herencia de ClasesLos objetos pueden heredar propiedades y mtodos de otros objetos. Para ello, PHPpermite la extensin (herencia) de clases, cuya caracterstica representa la relacinexistente entre diferentes objetos. Para definir una clase como extencin de una clase

    madre se utiliza la palabra clave extends.class NombreDeMiClaseMadre {

    #...}

    class NombreDeMiClaseHija extends NombreDeMiClaseMadre {/* esta clase hereda todos los mtodos y propiedades de

    la clase madre NombreDeMiClaseMadre*/

    }

    Declaracin de Clases finales En PHPPHP 5 incorpora clases finales que no pueden ser heredadas por otra. Se definenanteponiendo la palabra clavefinal.

    final class NombreDeMiClaseFinal {#esta clase no podr ser heredada

    }

    Qu tipo de clase declarar?

    Hasta aqu, han quedado en claro, cuatro tipos de clases diferentes: Instanciables,astractas, heredadas y finales. Cmo saber qu tipo de clase declarar? Tododepender, de lo que necesitemos hacer. Este cuadro, puede servirnos como gua bsica:

    Necesito... Instanciable Abstracta Heredada Final

    Crear una clase que pueda ser instanciada y/o heredada X

    Crear una clase cuyo objeto guarda relacin con los mtodos ypropiedades de otra clase

    X

    Crear una clase que solo sirva de modelo para otra clase, sinque pueda ser instanciada

    X

    Crear una clase que pueda instanciarse pero que no pueda serheredada por ninguna otra clase

    X

    Objetos en PHP 5

    Una vez que las clases han sido declaradas, ser necesario crear los objetos y utilizarlos,aunque hemos visto que algunas clases, como las clases abstractas son solo modelospara otras, y por lo tanto no necesitan instanciar al objeto.

    Instanciar una clasePara instanciar una clase, solo es necesario utilizar la palabra clave new. El objeto sercreado, asignando esta instancia a una variable (la cual, adoptar la forma de objeto).Lgicamente, la clase debe haber sido declarada antes de ser instanciada, como semuestra a continuacin:

    15

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    16/66

    POO y MVC en PHP Eugenia Bahit

    # declaro la claseclass Persona {

    #...}

    # creo el objeto instanciando la clase$persona = new Persona();

    Reglas de EstilosugeridasUtilizar nombres de variables

    (objetos) descriptivos, siempre en letraminscula, separando palabras por guionesbajos. Por ejemplo si el nombre de la clase esNombreDeMiClase como variable utilizar$nombre_de_mi_clase. Esto permitir unamayor legibilidad del cdigo.

    Propiedades en PHP 5

    Las propiedades representan ciertas caractersticas del objeto en s mismo. Se definenanteponiendo la palabra clave varal nombre de la variable (propiedad):

    class Persona {var$nombre;

    var$edad; var$genero;}

    Las propiedades pueden gozar de diferentes caractersticas, como por ejemplo, lavisibilidad: pueden ser pblicas, privadas o protegidas. Como veremos ms adelante, lavisiblidad de las propiedades, es aplicable tambin a la visibilidad de los mtodos.

    Propiedades pblicasLas propiedades pblicas se definen anteponiendo la palabra clave publical nombre dela variable. stas, pueden ser accedidas desde cualquier parte de la aplicacin , sinrestriccin.

    class Persona {public$nombre;

    public$genero;}

    Propiedades privadas

    Las propiedades privadas se definen anteponiendo la palabra clave privateal nombre dela variable. stas solo pueden ser accedidas por la clase que las defini.

    class Persona {public$nombre;

    public$genero; private$edad;}

    Propiedades protegidasLas propiedades protegidas pueden ser accedidas por la propia clase que la defini, ascomo por las clases que la heredan, pero no, desde otras partes de la aplicacin. stas,se definen anteponiendo la palabra clave protectedal nombre de la variable:

    16

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    17/66

    POO y MVC en PHP Eugenia Bahit

    class Persona {public$nombre;

    public$genero; private$edad;

    protected$pasaporte;}

    Propiedades estticasLas propiedades estticas representan una caracterstica de variabilidad de sus datos,de gran importancia en PHP 5. Una propiedad declarada como esttica, puede seraccedida sin necesidad de instanciar un objeto. y su valor es esttico (es decir, nopuede variar ni ser modificado). sta, se define anteponiendo la palabra clave staticalnombre de la variable:

    class PersonaAPositivo extends Persona {public static$tipo_sangre = 'A+';

    }

    Accediendo a las propiedad de un objeto

    Para acceder a las propiedad de un objeto, existen varias maneras de hacerlo. Todas ellas,dependern del mbito desde el cual se las invoque as como de su condicin yvisibilidad.

    Acceso a variables desde el mbito de la clase

    Se accede a una propiedad no esttica dentro de la clase, utilizando la pseudo-variable$thissiendo esta pseudo-variable una referencia al objeto mismo:

    return$this->nombre;

    Cuando la variable es esttica, se accede a ella mediante el operador de resolucin dembito, doble dos-puntos :: anteponiendo la palabra clave selfo parentsegn si trata deuna variable de la misma clase o de otra de la cual se ha heredado, respectivamente:

    printself::$variable_estatica_de_esta_clase ;printparent::$variable_estatica_de_clase_madre;

    Acceso a variables desde el exterior de la claseSe accede a una propiedad no esttica con la siguiente sintxis: $objeto->variable

    Ntese adems, que este acceso depender de la visibilidad de la variable. Por lo tanto,solo variables pblicas pueden ser accedidas desde cualquier mbito fuera de la clase oclases heredadas.

    # creo el objeto instanciando la clase$persona_a_positivo = new PersonaAPositivo();

    # accedo a la variable NO esttica

    print$persona_a_positivo->nombre;

    17

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    18/66

    POO y MVC en PHP Eugenia Bahit

    Para acceder a una propiedad pblica y esttica el objeto no necesita ser instanciado,permitiendo as, el acceso a dicha variable mediante la siguiente sintxis:

    Clase::$variable_esttica

    # accedo a la variable estticaprintPersonaAPositivo::$tipo_sangre;

    Constantes de Clase

    Otro tipo de propiedad de una clase, son lasconstantes, aquellas que mantienen su valor deforma permanente y sin cambios. A diferenciade las propiedades estticas, las constantes solopueden tener una visibilidad pblica.

    Puede declararse una constante de clase comocualquier constante normal en PHP 5. El acceso aconstantes es exactamente igual que al de otraspropiedades.

    Reglas de EstilosugeridasUtilizarNOMBRE_DE_CONSTANTE en letra

    MAYSCULA, ayuda a diferenciar rpidamenteconstantes de variables, haciendo ms legibleel cdigo.

    const MI_CONSTANTE = 'Este es el valor esttico de mi constante';

    Mtodos en PHP 5

    Cabe recordar, para quienes vienen de laprogramacin estructurada, que el mtodo deuna clase, es un algoritmo igual al de una funcin.La nica diferencia entre mtodo y funcin, esque llamamos mtodo a las funciones de unaclase (en la POO), mientras que llamamosfunciones, a los algoritmos de la programacinestructurada.

    Reglas de EstilosugeridasUtilizarnombres_de_funciones_descriptivos, enletra minscula, separando palabras porguiones bajos, ayuda a comprender mejor elcdigo fuente hacindolo ms intuitivo ylegible.

    La forma de declarar un mtodo es anteponiendo la palabra clave functional nombre delmtodo, seguido por un par parntesis de apertura y cierre y llaves que encierren elalgoritmo:

    # declaro la claseclass Persona {

    #propiedades

    #mtodos function donar_sangre(){ #... }

    }

    Al igual que cualquier otra funcin en PHP, los mtodos recibirn los parmetrosnecesarios indicando aquellos requeridos, dentro de los parntisis:

    18

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    19/66

    POO y MVC en PHP Eugenia Bahit

    # declaro la claseclass Persona {

    #propiedades

    #mtodos function donar_sangre($destinatario){ #... }

    }

    Mtodos pblicos, privados, protegidos y estticosLos mtodos, al igual que las propiedades, pueden ser pblicos, privados, protegidos oestticos. La forma de declarar su visibilidad tanto como las caractersticas de sta, esexactamente la misma que para las propiedades.

    staticfunction a(){}

    protectedfunction b(){}privatefunction c(){}# etc...

    Mtodos abstractosA diferencia de las propiedades, los mtodos, pueden ser abstractos como sucede conlas clases.

    El Manual Oficial de PHP, se refiere a los mtodos abstractos, describindolos de lasiguiente forma:

    [] Los mtodos definidos como abstractos simplemente declaran la estructura del mtodo,pero no pueden definir la implementacin. Cuando se hereda de una clase abstracta, todoslos mtodos definidos como abstract en la definicin de la clase parent deben ser redefinidosen la clase child; adicionalmente, estos mtodos deben ser definidos con la misma visibilidad(o con una menos restrictiva). Por ejemplo, si el mtodo abstracto est definido comoprotected, la implementacin de la funcin puede ser redefinida como protected o public,pero nunca como private. []7

    Para entender mejor los mtodos abstractos, podramos decir que a grandes rasgos, losmtodos abstractos son aquellos que se declaran inicialmente en una clase abstracta,sin especificar el algoritmo que implementarn, es decir, que solo son declarados perono contienen un cdigo que especfique qu harn y cmo lo harn.

    Tal vez, te preguntes Cul es la utilidad de definir mtodos abstractos y clasesabstractas? Para responder a esta pregunta, voy enfocarme en un caso de la vida real, enel cual estuve trabajando hace poco tiempo.

    Ejemplo

    Se trataba de hacer un sistema de gestininformtica, para las farmacias de los Hospitalesdel Gobierno de la Ciudad de Buenos Aires. Unpunto fundamental, era pensar en los insumosfarmacuticos como un todo abstracto. Por

    qu? Fundamentalmente, porque si bien existeninsumos farmacuticos de todo tipo y especie,cada uno de ellos, comparte caractersticascomunes, que por s solas no pueden definirsecon precisin. Por ejemplo, todos los insumos

    7 Fuente de la cita:http://www.php.net/manual/es/language.oop5.abstract.php

    19

    http://www.php.net/manual/es/language.oop5.abstract.phphttp://www.php.net/manual/es/language.oop5.abstract.phphttp://www.php.net/manual/es/language.oop5.abstract.php
  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    20/66

    POO y MVC en PHP Eugenia Bahit

    farmacuticos requieren de un tipo deconservacin especial. Algunos requierenrefrigeracin a determinada temperatura quesolo puede ser satisfecha conservndolos en unaheladera; otros requieren conservarse en unambiente seco; otros, no pueden tomar contactocon el exterior, a fin de conservar su capacidadestril; etc. Poda definirse con exactitud unaclase Insumo? La respuesta a esa pregunta, es

    justamente su pregunta retrica iras a lafarmacia a pedirle al farmacutico deme uninsumo de 500 mg? Insumo, representa laentidad abstracta y para eso, sirven las clasesabstractas. Con ellas declaramos aquellos

    objetos que no pueden ser definidos conpresicin pero aseguramos all, todas aquellascaractersticas que dichos objetos, guardarnentre s. Declarar un mtodo conservar_insumo()como abstracto, servira para luego definir conexactitud, en una clase heredada, el algoritmoexacto que determinado insumo necesitara paraprocesar su conservacin. Es as entonces, queuna clase InsumoRefrigerado heredara deInsumo, y redefinira el mtodoconservar_insumo() indicando un algoritmo quesolicitara la temperatura a la cual debaconservarse en heladera, etc.

    Mtodos mgicos en PHP 5PHP 5, nos trae una gran cantidad de auto-denominados mtodos mgicos. Estosmtodos, otorgan una funcionalidad pre-definida por PHP, que pueden aportar valor anuestras clases y ahorrarnos grandes cantidades de cdigo. Lo que muchosprogramadores consideramos, ayuda a convertir a PHP en un lenguaje orientado aobjetos, cada vez ms robusto.

    Entre los mtodos mgicos, podemos encontrar los siguientes:

    El Mtodo Mgico __construct()El mtodo __construct() es aquel que ser invocado de manera automtica, alinstanciar un objeto. Su funcin es la de ejecutar cualquier inicializacin que el objeto

    necesite antes de ser utilizado.# declaro la claseclass Producto {

    #defino algunas propiedades public$nombre; public$precio; protected$estado;

    #defino el mtodo set_estado_producto() protectedfunction set_estado_producto($estado){ $this->estado =$estado;

    }

    # constructor de la clase function __construct(){ $this->set_estado_producto('en uso');

    }

    }

    En el ejemplo anterior, el constructor de la clase se encarga de definir el estado del producto como enuso, antes de que el objeto (Producto) comience a utilizarse. Si se agregaran otros mtodos, stos, podrnhacer referencia al estado del producto, para determinar si ejecutar o no determinada funcin. Porejemplo, no podra mostrarse a la venta un producto en uso por el sistema, ya que a ste, se le podraestar modificando el precio.

    El mtodo mgico __destruct()El mtodo __destruct() es el encargado de liberar de la memoria, al objeto cuando yano es referenciado. Se puede aprovechar este mtodo, para realizar otras tareas que se

    20

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    21/66

    POO y MVC en PHP Eugenia Bahit

    estimen necesarias al momento de destruir un objeto.

    # declaro la claseclass Producto {

    #defino algunas propiedades

    public$nombre; public$precio; protected$estado;

    #defino el mtodo set_estado_producto() protectedfunction set_estado_producto($estado){ $this->estado =$estado;

    }

    # constructor de la clase function __construct(){ $this->set_estado_producto('en uso');

    }

    # destructor de la clase function __destruct(){ $this->set_estado_producto('liberado');

    print'El objeto ha sido destruido';

    }

    }

    Otros mtodos mgicosPHP nos ofrece otros mtodos mgicos tales como __call, __callStatic,__get, __set, __isset, __unset, __sleep, __wakeup, __toString,

    __invoke, __set_state y __clone.Puede verse una descripcin y ejemplo de su uso, en el sitio Web oficial de PHP:

    http://www.php.net/manual/es/language.oop5.magic.php

    21

    http://www.php.net/manual/es/language.oop5.magic.phphttp://www.php.net/manual/es/language.oop5.magic.php
  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    22/66

    POO y MVC en PHP Eugenia Bahit

    Ejercicios Prcticos

    Para practicar lo que hemos visto hasta ahora, les propongo hacer algunos ejercicios, afin de asimilar los conocimientos de los captulos I y II.

    Ejercicio N1: Sobre la programacin orientada a objetos

    1.1) Qu es la Programacin Orientada a Objetos?

    a) Un patrn de diseo de softwareb) Un paradigma de programacin

    c) La nica forma en la que se puede programar en PHP

    d) Ninguna de las anteriores

    1.2) Cul de las siguientes opciones, responde mejor a los

    elementos que forman parte de la POO?

    a) Clases, objetos, mtodos, atributos y propiedades

    b) Atributos, eventos y funciones

    c) Mtodos, inmutabilidad, abstraccin, funciones y prototipos

    e) Variables, constantes y funciones

    1.3) Cul de las siguientes afirmaciones es FALSA con respecto a

    las caractersticas de la POO?

    a) La abstraccin y el polimorfismo son caracterstica esenciales de la

    programacin orientada a objetos

    b) Encapsulamiento es sinnimo de aislamiento

    c) En la POO, la modularidad, es la caracterstica que permite dividir

    una aplicacin, en partes ms pequeas, con independencia unas de las

    otras

    22

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    23/66

    POO y MVC en PHP Eugenia Bahit

    Ejercicio N2: Sobre la POO en PHP

    2.1) Dado el siguiente cdigo:

    Qu crees que fallara al intentar ejecutarlo?a) ItemProducto fallar ya que est heredando de otra clase

    b) No fallara nada

    c) Producto no puede heredar de ItemProducto ya que esta clase ha

    sido declarada como clase final

    2.2) Cul crees que ser la salida del siguiente cdigo?

    a) Cliente desconocido 1001b) Cliente desconocido

    c) Se imprimira Cliente desconocido pero fallara luego el acceso a $id

    ya que es una propiedad protegida

    2.3) Cul crees que ser la salida del siguiente cdigo?

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    24/66

    POO y MVC en PHP Eugenia Bahit

    protected $id = 1001;

    function __construct() {

    self::$nombre = 'Juan Prez';

    }}

    print Cliente::$nombre_completo;

    ?>

    a) Cliente desconocido

    b) Juan Prez

    Explica porqu has elegido esa respuesta:

    2.4) Teniendo en cuenta el siguiente cdigo:

    Cul de las siguientes opciones, estimas que sera la

    apropiada para imprimir en pantalla, la propiedad

    "nombre_completo"

    a)print Cliente::nombre_completo;b)print Cliente::$nombre_completo;c)$cliente = new Cliente();print $cliente->nombre_completo;

    d)$cliente = new Cliente();print $cliente->$nombre_completo;

    24

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    25/66

    POO y MVC en PHP Eugenia Bahit

    Soluciones a los ejercicios 1 y 2

    Ejercicio N1Pregunta 1.1: respuesta b

    Pregunta 1.2: respuesta a

    Pregunta 1.3: respuesta b

    Ejercicio N2Pregunta 2.1: respuesta c

    Pregunta 2.2: respuesta c

    Pregunta 2.3: respuesta aporque a las propiedades estticas no se les puede modificar su valor

    Pregunta 2.4: respuesta b

    25

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    26/66

    POO y MVC en PHP Eugenia Bahit

    Programacin Real Orientada a Objetos en PHP

    Veremos ahora, un ejemplo basado en la realidad de un programador.

    En este caso, se trata de un ABM de usuarios.Nteseque los mtodos respectivos han sido resumidos no encontrndose en stos,algoritmos de validacin de datos. Se ejemplifica todo aquello que es relevante en laPOO.

    Archivos fuente del ABM de Usuarios

    Archivo db_abstract_model.php

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    27/66

    POO y MVC en PHP Eugenia Bahit

    array_pop($this->rows);

    }

    }

    ?>

    Archivo usuarios_model.php

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    28/66

    POO y MVC en PHP Eugenia Bahit

    endforeach;

    $this->query ="

    UPDATE usuarios

    SET nombre='$nombre',

    apellido='$apellido',clave='$clave'

    WHERE email = '$email'

    ";

    $this->execute_single_query();

    }

    publicfunction delete($user_email=''){$this->query ="

    DELETE FROM usuarios

    WHERE email = '$user_email'

    ";

    $this->execute_single_query();

    }

    function __destruct(){unset($this);

    }

    }

    ?>

    Archivo abm_example.php

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    29/66

    POO y MVC en PHP Eugenia Bahit

    $usuario4=new Usuario();$usuario4->get('[email protected]');

    $usuario4->delete('[email protected]');

    print$usuario4->nombre . ' '.$usuario4->apellido . ' ha sido eliminado';

    ?>

    Explicando el cdigo en el contexto de la POO: La mejor forma de aprender y comprender

    En principio tenemos 3 archivos:

    2 archivos son "clases" de dos modelos de objetos.

    1 archivo, es el que realiza las instancias creando la cantidad deobjetos necesaria.

    Respuestas a Preguntas Frecuentes sobre el cdigo

    1. Respuestas a preguntas frecuentes dela clase DBAbstractModel

    1.1 Por qu la clase est definida comoabstracta?Una base de datos, puede tener variosmtodos, como insertar datos, editar datos,eliminar datos o simplemente consultardatos. El algoritmo de cada uno de esosmtodos no puede definirse con exactitudpor qu? Porque cada dato que se inserte,modificque, elimine o consulte, variar eninfinidad de aspectos: desde los tipos dedatos hasta las tablas y los campos a los quese deba acceder, etc.

    Basados en el principio de modularidad de laPOO, es necesario tener en cuenta, que HOY,necesito un ABM de usuarios, pero maana,este requisito puede ampliarse y, debo dejar

    todo preparado para que el sistema pueda serescalable y modular (otros mdulos puedenser requeridos en el futuro).

    Si solo contemplara los mtodos de insercin,edicin, consulta y eliminacin de usuarios enesta clase, estara cometiendo dos erroresimperdonable:

    1. No estara respetando el principio demodularidad de la POO

    2. Los mtodos mencionados no son acaso mtodos de un nuevo objeto

    llamado Usuario?Por otro lado, por cuestiones de seguridad,se haca necesario no permitir instanciar esta

    clase desde ningn lugar de la aplicacin ycontrolar con mucha precaucin, el acceso asus mtodos y propiedades, ya que una basede datos, es el "alma" de toda aplicacin.

    1.2 Para qu declarar propiedadesestticas?En principio, tanto el host como el usuario ycontrasea de la base de datos, en estaaplicacin, son nicos. No varan. De all, quecomo caracterstica se les asign serestticos, a fin de, por cuestiones deseguridad, no puedan ser modificadosdinmicamente (tengamos en cuenta que unaclase abstracta debe ser heredada s o spara ser utilizada).

    1.3 Por qu propiedades estticas y noconstantes de clase?Porque a las constantes, aunque lgicamenteguardan en s mismas la condicin de"estticas" en el sentido de que "no puedenser modificadas", pueden ser accedidas desdecualquier clase que herede de la clase que lasdeclare. Pues entonces, la pregunta es Paraqu querra una clase "hija" conocer el host,usuario y contrasea de una base de datos?Es una cuestin ntamente de seguridad, yaque a una constante no se la puede definircomo privada y si se la quiere ocultar a las

    clases "hijas", no quedar otra alternativa quedeclararlas como propiedades estticas.

    29

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    30/66

    POO y MVC en PHP Eugenia Bahit

    1.4 Por qu propiedades estticas y a lavez privadas?(ver respuestas anteriores)

    1.5 Con qu sentido declarar laspropiedades como protegidas?Es simple. Algunos mdulos pueden necesitarutilizar una base de datos diferente. Todos losmdulos, necesitarn queries personalizadospara sus consultas. Y lgicamente, todosnecesitarn acceder y conocer los resultadosde los datos arrojados por una consulta. Esdecir, que tanto la propiedad db_name comoquery y rows, deben tener permisos para ser

    ledas y modificadas, pero Ojo! Solo por lasclases hijas de DBAbstractModel Qu sentidotendra permitir a un programador acceder aestas propiedades si puede ser la clase hija,quien las controle?

    1.6 Por qu los mtodos open yclose_connection son privados?Pues porque la clase es la nica con permisopara abrir y cerrar conexiones a la base dedatos. Es una cuestin de control y seguridad.

    Si necesitas insertar datos, consultarlos ohacer con ellos otras actividades, tienesmtodos protegidos pero no privados, que tepermiten hacerlo.

    1.7 Por qu los mtodos de consulta yejecucin son protegidos y no pblicos?Consultar una base de datos, modificar oeliminar sus datos, as como insertar nuevos,no puede ser una tarea que se deje librada alazar y al libre acceso de cualquiera. Esnecesario "proteger" los datos a fin deresguardar su integridad y, la forma dehacerlo, es "proteger" los mtodos que seencuentran al servicio de dichos datos.

    1.8 Por qu hay mtodos declaradoscomo abstractos y adems protegidos?Esta pregunta, en gran parte, la responde larespuesta de la pregunta 1.1. El hecho de quese definan como abstractos, es porque

    necesariamente DEBEN ser mtodos comunesa toda clase que los hereden. Pero solo laclase hija, podr definirlos (re-definirlos

    tcnicamente hablando) ya que tal cual seexplic en la pregunta 1.1., solo ellas conocenlos requerimientos especficos.

    Se declaran adems como protegidos, por una

    cuestin de seguridad ("por las dudas" paraque solo puedan ser vistos por clasesheredadas). Esto, da lugar a las clases hijas, aque modifiquen su visibilidad de acuerdo alcriterio de cada una de ellas.

    2. Respuestas a preguntas sobre la claseUsuario

    2.1 Por qu la clase Usuario es unaextensin de DBAbstractModel?

    La clase usuario TIENE necesariamente queheredar de DBAbstractModel ya que DEBEutilizar sus mtodos (propios y definidos paraacceder a la base de datos) y redefinirobligadamente aquellos declarados comoabstractos, a fin de continuar un modelo deadministracin de los ABM (altas, bajas ymodificaciones).

    2.2 Con qu fin nombre, apellido e e-mail son propiedades pblicas mientrasque clave es privada y id, protegida?Pensemos esto como en la vida real: tunombre, apellido e e-mail, puede sernecesario para cientos de "trmites" yacciones de tu vida diaria y no andas por lavida negndolos a todo quien te los pida.Podramos decir, que no tiene nada de maloque facilites pblicamente estos datos, aquien decidas.

    Ahora bien le das tu contrasea a

    cualquiera?Si lo haces, deja de hacerlo.

    Lacontrasea es un dato que debe ser privado.Nadie puede tener acceso a l. Es unacuestin de seguirdad.

    El nmero de ID, sera como tu nmero dedocumento o pasaporte. Es un dato quedebes mantener protegido pero que enalgunos casos, te ser requerido y necesitarsdarlo obligadamente. Por ejemplo, no podrasnegarte a mostrar tu pasaporte enmigraciones. Sin embargo, DEBES negarte adecirle el PIN de tu tarjeta de crdito a

    cualquier persona.

    30

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    31/66

    POO y MVC en PHP Eugenia Bahit

    2.3 Por qu se utiliza el mtodo__construct() para modificar el nombrede la base de datos? Por qu no seencarga la clase madre de modificar ese

    valor?El nombre de la base de datos, es algo quevariar de acuerdo al mdulo que lo esttrabajando. Seguramente, de existir en elfuturo una clase llamada Producto, sta,sobreescribir el valor de db_name.Modificarlo automticamente utilizando uncosntructor, nos asegura instanciar el objetocon un valor de propiedad adecuado.

    2.4 Por qu se utiliza require_once y noinclude_once?La diferencia entre include y require es querequire, si no puede incluir el archivo al que seest importando, frena la ejecucin del script,siendo que include, solo arroja un error,pero contina la ejecucin. Al tratarse de una

    clase que "requiere" s o s, de su clase madre,no tendra sentido permitir que se contineejecutando, si no ha podido cargarse elarchivo.

    3. Respuestas a preguntas sobre elarchivo de instancias

    3.1 Por qu el archivo tiene cuatroinstancias al mismo objeto?Es necesario hacer notar que si bien losobjetos comparten propiedades y mtodosen comn, no todos son idnticos. Es decir,todos los seres humanos tenemos ciertascaractersticas en comn y realizamos

    acciones similares. Pero cada uno de nosotros,tiene una nica identidad. Por eso, no puededecirse que se instancia cuadro veces elmismo objeto, porque en realidad, son cuatroobjetos diferentes donde cada uno de ellos,tiene una identidad propia.

    31

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    32/66

    POO y MVC en PHP Eugenia Bahit

    CAPTULO IIIIntroduccin al patrn arquitectnico MVC

    32

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    33/66

    POO y MVC en PHP Eugenia Bahit

    Introduccin al patrn Arquitectnico MVC

    MVC, son las siglas de modelo-vista-controlador (o en ingls, model-view-controller),que es uno de los tantos patrones de arquitectura de software.

    Antes de abordar de lleno este patrn, vamos a intentar hacer una introduccin a laarquitectura de software, desmembrndola de lo general hacia lo particular, para al finllegar al detalle, procurando entender exactamente de que se trata, en el contextoadecuado.

    Probablemente, este captulo sea el ms complejo (y mucho ms extenso en relacin alCaptulo I). Pero si quieres poder aplicar de forma decuada el patrn MVC, debes hacer elesfuerzo de seguirlo con especial inters y actitud entuciasta.

    Introduccin a la Arquitectura de Software

    Qu es la arquitectura de software?Es necesario aclarar, que no existe una definicin nica, exacta, abarcativa e inequvocade arquitectura de software. La bibliografa sobre el tema es tan extensa como lacantidad de definiciones que en ella se puede encontrar. Por lo tanto tratar, no dedefinir la arquitectura de software, sino ms bien, de introducir a un concepto simple ysencillo que permita comprender el punto de vista desde el cual, este libro abarca a laarquitectura de software pero, sin nimo de que ello represente una definicin ms.

    A grandes rasgos, puede decirse que la Arquitectura deSoftware es la forma en la que se organizan loscomponentes de un sistema, interactan y se relacionanentre s y con el contexto, aplicando normas y principiosde diseo y calidad, que fortalezcan y fomenten lausabilidad a la vez que dejan preparado el sistema, parasu propia evolucin.

    Tal vez ests pensando ...al fin y al cabo, me haz dado una definicin ms.... La respuestaes s. Probablemente no pude contenerme de hacerlo no lo niego -. Pero, no debes

    tomar lo anterior como una definicin, sino como la forma en la que en este libro, seabarca la arquitectura de software.

    Tendencias de la Arquitectura de SoftwareSi bien no puede decirse o mejor dicho, no es muy acadmico decirlo, voy a tomarme elatrevimiento de mencionar solo dos tendencias arquitectnicas, claramentediferenciadas entre s:

    La Arquitectura de Software Orientada a Objetos (como ingenira de sistemas)

    La Arquitectura Estructurada (como desarrollo de una aplicacin)

    Como podemos ver, en este libro, es a la primera a la cual nos enfocamos.

    33

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    34/66

    POO y MVC en PHP Eugenia Bahit

    A fin de satisfacer la inquietud de curiosos (y de paso, no ocultar que existen), voy amencionar la existencia de otras dos corrientes: la arquitectura basada en patrones y laarquitectura basada en procesos y metodologas.

    Personalmente, no las considero como cuatro corrientes Por qu? Porqueindependientemente de cual te agrade ms, si la AS orientada o objetos o la ASestructural, implican necesariamente dos corrientes que deben aplicarse de formaoptativa (o utilizas una o la otra pero no las dos simultneamente), mientras que la ASbasada en patrones y la AS basada en procesos, pueden utilizarse como complemento delas dos primeras. Pero esto, es mera filosofa propia, con la cual, no he encontradodemasiado consenso. Pues no los aburrir con ello e iremos a lo prctico.

    Caractersticas de la Arquitectura de Software: Atributos de calidadLa Calidad del Software puede definirse como los atributos implcitamente requeridos

    en un sistema que deben ser satisfechos. Cuando estos atributos son satisfechos,puede decirse (aunque en forma objetable), que la calidad del software es satisfactoria.

    Estos atributos, se gestan desde la arquitectura de software que se emplea, ya seacumpliendo con aquellos requeridos durante la ejecucin del software, como conaquellos que forman parte del proceso de desarrollo de ste.

    Atributos de calidad que puedenobservarse durante la ejecucin delsoftware

    1. Disponibilidad de uso

    2. Confidencialidad, puesto que sedebe evitar el acceso no autorizadoal sistema

    3. Cumplimiento de la Funcionalidadrequerida

    4. Desempeo del sistema conrespecto a factores tales como lacapacidad de respuesta

    5. Confiabilidad dada por laconstancia operativa y permanente

    del sistema6. Seguridad externa evitando la

    prdida de informacin debido aerrores del sistema

    7. Seguridad interna siendo capaz deimpedir ataques, usos noautorizados, etc.

    Atributos de calidad inherentes alproceso de desarrollo del software

    8. Capacidad de Configurabilidad queel sistema otorga al usuario a fin derealizar ciertos cambios

    9. Integrabilidad de los mdulosindependientes del sistema

    10.Integridad de la informacinasociada

    11.Capacidad de Interoperar conotros sistemas (interoperabilidad)

    12.Capacidad de permitir serModificable a futuro(modificabilidad)

    13.Ser fcilmente Mantenible(mantenibilidad)

    14.Capacidad de Portabilidad, es decirque pueda ser ejecutado endiversos ambientes tanto desoftware como de hardware

    15.Tener una estructura que facilite laReusabilidad de la misma enfuturos sistemas

    16.Mantener un diseo arquitectnicoEscalable que permita suampliacin (escalabilidad)

    17.Facilidad de ser Sometido aPruebas que aseguren que el

    sistema falla cuando es lo que seespera (testeabilidad)

    34

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    35/66

    POO y MVC en PHP Eugenia Bahit

    De lo general a lo particular: del estilo arquitectnico al patrn de diseo

    Existe una diferencia entre Estilo Arquitectnico, Patrn Arquitectnico y Patrn deDiseo, que debe marcarse a fin de evitar las grandes confusiones que inevitablemente,

    concluyen en el mal entendimiento y en los resultados poco satisfactorios. stos, son losque en definitiva, aportarn calidad al sistema resultante. En lo sucesivo, trataremos deestablecer la diferencia entre estos tres conceptos, viendo como los mismos, serelacionan entre s, formando parte de un todo: la arquitectura de software.

    Relacin y DiferenciaEstilo Arquitectnico, Patrn Arquitectnico y Patrn de Diseo, representan, de logeneral a lo particular, los niveles de abstraccin que componen la Arquitectura deSoftware. En este sentido, puede decirse que:

    El Estilo Arquitectnico es el encargado de: Describir la estructura generalde un sistema, independientemente de otros

    estilos

    Definir los componentes del sistema, su relacin e interactividad

    Ejemplos :flujo de datos, llamada y retorno, etc.

    El Patrn Arquitectnico es el nivel en el cual la arquitectura de software:

    Define la estructura bsicade un sistema, pudiendo estar relacionado con otrospatrones

    Representa una plantilla de construccinque provee un conjunto desubsistemasaportando las normas para su organizacin

    Ejemplos : Capas, MVC, Tuberas y Filtros, Pizarra, etc.

    El Patrn de Diseo es el tercer nivel de abstraccin de la arquitectura desoftware, cuya finalidad es la de precisar en detalle los subsistemas y componentesde la aplicacin

    Ejemplos : Proxy, Command, Factory, etc..

    El Patrn Arquitectnico modelo-vista-controlador (MVC)

    Habiendo dejado en claro de qu hablamos exactamente cuando nos referimos a patrnarquitectnico, estamos en condiciones de ahondar en los detalles del patrn MVC.

    Aclarciones previasAntes de caer inmersos en el conocimientosobre el patrn MVC, quiero dejar en claroque en este libro, no har referencia a ningnframework.

    El objetivo de POO y MVC en PHPno es el de

    formar a programadores en el uso deframeworks, sino que el mismo, parte de unaclara pregunta a caso los frameworks no han

    sido desarrollados por programadores?Tenemos la alternativa de utilizar frameworkspara ahorrar tiempo de programacin o, sirealmente nos apasiona programar,adquirimos los conocimientos necesarios,tenemos la capacidad y nos animamos,podemos crear nuestros propiosframeworks. De hecho, no se trata dereinventar la rueda, sino de crear una,adaptada a nuestras necesidades. Y si lo que

    35

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    36/66

    POO y MVC en PHP Eugenia Bahit

    necesitamos es una rueda para acoplar a unmueble que acabamos de crear cul sera elsentido de intentar modificar una rueda decamin si tenemos todas las herramientas

    necesarias para ser creadores y nomodificadores?

    Claro que esto, depende de la pasin, gusto,capacidad y por qu no, de la ambicin decada uno. El tiempo, es discutible. Pues puededemandarte ms tiempo modificar algo queya existe, que crearlo. Si quieres reparar unmueble te llevar ms tiempo repararlo que ira comprar uno nuevo. Y si eres ebanista,

    seguramente te llevar menos tiempo hacerun nuevo mueble que ir a comprarlo. Puessabes exactamente lo que necesitas y comohacerlo y eso, har que ahorres el tiempo de

    recorrer todas las muebleras y terminescomprando el mueble que ms se asemeje alque quieres. El mueble, ser similar, pero noexactamente igual al que tu imaginaste. Detodas formas, la alternativa de modificar,siempre la tienes... al igual que tambin tienesla de crear. Todo depender del criterio deeleccin que apliques y sea cual sea, tueleccin ser la correcta, justamente porquehabrs elegido y eso, es lo ms importante.

    Qu es el patrn MVC?El patrn MVC es un patrn de arquitectura de software encargado de separar lalgica de negocio de la interfaz del usuario y es el ms utilizado en aplicaciones Web,ya que facilita la funcionalidad, mantenibilidad y escalabilidad del sistema, de formasimple y sencilla, a la vez que permiteno mezclar lenguajes de programacin en el mismocdigo.

    MVC divide las aplicaciones en tres niveles de abstraccin:

    Modelo: representa la lgica de negocios. Es el encargado de accesar de formadirecta a los datos actuando como intermediario con la base de datos. Lo que ennuestro ejemplo de programacin orientada a objetos, seran las clasesDBAbstractModel y Usuario.

    Vista: es la encargada de mostrar la informacin al usuario de forma grfica yhumanamente legible.

    Controlador:es el intermediario entre la vista y el modelo. Es quien controla lasinteracciones del usuario solicitando los datos al modelo y entregndolos a la vistapara que sta, lo presente al usuario, de forma humanamente legible.

    Cmo funciona el patrn MVC?El funcionamiento bsico del patrn MVC, puede resumirse en:

    El usuario realiza una peticin

    El controlador captura el evento (puede hacerlo mediante un manejador deeventos handler-, por ejemplo)

    Hace la llamada al modelo/modelos correspondientes (por ejemplo, medianteuna llamada de retorno callback -) efectuando las modificaciones pertinentessobre el modelo

    El modelo ser el encargado de interactuar con la base de datos , ya sea enforma directa, con una capa de abstraccin para ello, un Web Service, etc. yretornar esta informacin al controlador

    36

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    37/66

    POO y MVC en PHP Eugenia Bahit

    El controlador recibe la informacin y la enva a la vista

    La vista, procesa esta informacin pudiendo hacerlo desde el enfoque queveremos en este libro, creando una capa de abstraccin para la lgica (quien seencargar de procesar los datos) y otra para el diseo de la interfaz grfica o GUI.La lgica de la vista, una vez procesados los datos, los acomodar en base aldiseo de la GUI - layout y los entregar al usuario de forma humanamentelegible.

    Funcionamiento del patrn modelo-vista-controlador

    37

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    38/66

    POO y MVC en PHP Eugenia Bahit

    Hasta qu, hemos hablado de estilos arquitectnicos, nos hemos introducido en uno delos patrones arquitectnicos (MVC) pero, en todo esto en qu momento intervienenlos patrones de diseo?

    Es aqu donde debemos notar que stos, intervienen en la forma en la que cada capa(modelo, vista y controlador), disea su estructura. El controlador decidir (aunque enrealidad, nosotros lo haremos) si utilizar un handler para manejar los eventos delusuario. En ese caso, estara optando por un patrn de diseo. Si para llamar al modelo,utiliza un callback, estara utilizando otro, y as en lo sucesivo.

    Personalmente, sugiero que, a no ser que se trate de sistemas realmente robustos ycomplejos, no se compliquen demasiado por ahora - en aplicar todos y cada uno delos patrones de diseo que encuentren en el camino. La forma de hacerlo bien, es:

    Sencillez y simplicidad

    Fcil mantenibilidad

    Practicidad para evolucionar

    Si se tienen en cuenta estas tres premisas, el resultado de un cdigo limpio, legible y fcilde interpretar para cualquier programador, estar 90% asegurado.

    38

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    39/66

    POO y MVC en PHP Eugenia Bahit

    CAPTULO IVEl patrn MVC en PHP

    39

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    40/66

    POO y MVC en PHP Eugenia Bahit

    El Patrn MVC en PHP

    Para que el concepto de modelo-vista-controlador nos queda ms claro, vamos a iranalizndolo con ejemplos concretos, en el lenguaje que impulsa este libro: PHP.

    Al final de este captulo, vamos a encontrar ejercicios prcticos de autoevaluacin yluego, continuaremos transformando y ampliando nuestro primer ejemplo del Captulo II,siguiendo el patrn arquitectnico MVC, con sus correspondientes comentarios yaclaraciones.

    El modelo

    Con respecto al modelo, no tenemos demasiada novedad. El modelo, no es ms que elconjunto de clases con las que hemos trabajado hasta ahora, incluyendo entre ellas, la

    capa de abstraccin de la base de datos.

    Interfaces en PHP: un nuevo concepto para crear modelosEn esta etapa, podemos ampliar las referencias de PHP, incorporando un nuevoconcepto: las interfaces.

    El Manual Oficial de PHP describe las interfaces de la siguiente forma:

    Las interfaces de objetos permiten crear cdigo con el cual especificar qu mtodos debenser implementados por una clase, sin tener que definir cmo estos mtodos son manipulados.

    Las interfaces son definidas utilizando la palabra clave interface, de la misma forma que conclases estndar, pero sin mtodos que tengan su contenido definido. Todos los mtodosdeclarados en una interfaz deben ser public, ya que sta es la naturaleza de una interfaz.8[...]

    Una interface se define utilizando la palabra clave interfacey se la implementa utilizandola palabra clave implements.

    En varias ocasiones, las interfaces nos servirn para ampliar los modelos.

    Generamos la interface:

    interface Postre {publicfunction set_ingredientes();

    }

    Implementamos la interface:

    class Bizcochuelo implements Postre {

    var$ingredientes=array();

    publicfunction set_ingredientes(){

    $this->ingredientes =array('harina'=>'2 tazas', 'leche'=>'1 taza',

    8 Fuente de la cita:http://php.net/manual/es/language.oop5.interfaces.php

    40

    http://php.net/manual/es/language.oop5.interfaces.phphttp://php.net/manual/es/language.oop5.interfaces.phphttp://php.net/manual/es/language.oop5.interfaces.php
  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    41/66

    POO y MVC en PHP Eugenia Bahit

    'azucar'=>'1 taza', 'huevo'=>1

    );

    }

    }

    Extendemos una clase (que por defecto, implementar la interface):

    class BizcochueloVainilla extends Bizcochuelo {

    publicfunction set_ingredientes(){$this->ingredientes['escencia de vainilla']= 'a gusto';

    }

    function __construct(){parent::set_ingredientes();

    $this->set_ingredientes();

    }

    }

    Tambin podemos crear otra clase que implemente la interface:

    class Alfajor implements Postre {

    publicfunction set_ingredientes(){$this->ingredientes =array('Tapas de maizena'=>2,

    'dulce de leche'=>'1 cda. sopera',

    'coco rallado'=>'1 cdta. de te');

    }

    function __construct(){$this->set_ingredientes();

    }

    }

    Diferencia entre Interfaces y Clases abstractasProbablemente te preguntes cul es la diferencia entre una interface y una claseabstracta? Creme: todos nos lo hemos preguntado alguna vez :)

    En principio, existe una diferenciaconceptual que a niveles prcticos tal vez no es deltodo clarificadora. Esta diferencia, radica en que las clases abstractas, no dejan de serclases, las cuales representan la abstraccin de un objeto siguiendo un orden derelacin jerarquca entre ellas:Clase B hereda de Clase A y Clase C hereda de Clase B,pero no puede tener herencias mltiples, es decir no puede heredar de ms de una clase,ya que ellas, guardan una relacin de orden jerrquico entre s.

    class A {}class B extendsclass A {}#correctoclass C extendsclass B {}#correctoclass D {}#correctoclass E extendsclass A, class D { } # incorrecto!!! no se puede hacer!!!

    # lo correcto sera:class D extendsclass A {}class E extendsclass D {}

    41

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    42/66

    POO y MVC en PHP Eugenia Bahit

    A diferencia de las clases abstractas, conceptualmente, las interfaces son solo unconjunto de mtodos caractersticos de diversas clases, independientemente de larelacin que dichas clases mantengan entre s. De hecho, una misma clase, puedeimplementar mltiples interfaces:

    interface A {}interface B {}interface C {}class MiClase implements A, B, C {}

    No obstante la diferencia conceptual, podemos establecer claras diferencias prcticas,que nos ayudarn a asimilar mejor estos conceptos:

    Las interfaces no pueden definir propiedades (de hecho, no poseen propiedades

    porque a diferencia de las clases abstractas no tienen relacin con un objeto, ysolo los objetos tienen propiedades)

    Las interfaces no pueden tener mtodos definidos con su algoritmocorrespondiente (solo pueden declarar los mtodos pero no pueden indicar elqu ni el cmo hacerlo, mientras que las clases abstractas, s pueden)

    Las interfaces no pueden instanciarse porque no tienen referencias asociadas aobjetos, mientras que las clases abstractas no pueden instanciarse, porque susobjetos son entes abstractos que necesitan de una clase no abstracta paradefinirse con exactitud y poder ser instanciados.

    Todos los mtodos declarados en una interface deben ser pblicos , puesto que

    la finalidad de una interface, es brindar un mbito pblico de un modelo. Lasclases abstractas, pueden tener mtodos abstractos tanto pblicos comoprotegidos (aquellos que debern ser obligatoriamente redefenidos por las clasesque la hereden) y mtodos privados que solo ella utilice.

    Lo que NO deben hacer las insterfacesLas interfaces no pueden:

    Tener el mismo nombre que una clase (PHP las interpreta como una clase ms.Crear una interface con el mismo nombre que una clase, sera interpretado por

    PHP como una re-declaracin de clase) Diferentes interfaces no pueden tener nombres de mtodos idnticos si sern

    implementadas por la misma clase

    La vista

    Como hemos visto anteriormente, la vista representa la interfaz grfica del usuario (GUI),es decir, es la encargada de mostrar la informacin al usuario de manera humanamentelegible.

    A tal fin, divideremos la vista en dos sub-capas: la GUI propiamente dicha y su lgica.

    42

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    43/66

    POO y MVC en PHP Eugenia Bahit

    Vista: la interfaz grficaGeneralmente, en la prctica, no somos los programadores quienes nos hemos deencargar de la GUI. Es tarea que corresponde a diseadores Web o grficos, segnaplique.

    Como arquitectos, debemos tener preparada la estructura de nuestra aplicacin, paraque diseadores puedan trabajar libremente en la GUI, sin tener que acceder al cdigoPHP. En este libro, veremos adems, como evitar por completo que los diseadorestengan que implementar cdigo PHP en sus GUI y que programadores, tengamos queimplementar cdigo HTML en nuestras lgicas.

    En principio, la parte grfica de las vistas (archivos HTML, imgenes, CSS, etc.), debertener un directorio reservado solo para ella. De esta forma, obtenemos varias ventajasde trabajar con el patrn MVC:

    Los archivos estticos (HTML, CSS, imgenes e incluso JavaScript) puedenalmacenarse en un servidor independiente con todos los beneficios que estoconlleva (al igual que sucede con las bases de datos, los archivos estticos tambinpueden independizarse)

    Nos aseguramos de que el cdigo esttico (aquel desarrollado por diseadores),no rompa el ncleo de la aplicacin

    Permitimos a los diseadores trabajar cmodamente en la libertad de aplicartodos los conocimientos y herramientas inherentes a su rea de conocimiento, sinla presin de tener que implementar un lenguaje de programacin quedesconocen, les es poco familiar o simplemente, la herramienta que utilizan paradisear, suele daarles el cdigo no-esttico

    En segundo lugar, cada plantilla template - o archivo HTML, deber hacer referenciaesttica a los datos que se quieran reemplazar dinmicamente. Para esto, no sernecesario implementar cdigo que no sea HTML.

    Veremos aqu como hacer referencia a estos datos, y ms adelante, veremos como lalgica de la vista se encargar de renderizarlos.

    Supongamos que tenemos una plantilla HTML, donde lo que necesitamos reemplazar demanera dinmica, es: ttulo de la pgina, keywords y descripcin. La mejor manera dereferenciar a estos datos, facilitando la tarea a un diseador, es haciendo una referenciatextual a stos. Para que a la vez, los programadores logremos diferenciar que all seincluyen datos dinmicos, una buena prctica, es encerrar esa referencia textual entrellaves.

    Veamos un ejemplo:

    {Ttulo de la Pgina}

    43

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    44/66

    POO y MVC en PHP Eugenia Bahit

    {Ttulo de la Pgina}

    Como podemos ver, en la plantilla HTML solo hay cdigo HTML. Para un diseador, seruna tarea sencilla.

    Veremos en el siguiente paso, como la lgica de la vista, se encargar de reemplazarestos datos.

    La Lgica de la VistaTenemos la plantilla que cre nuestro diseador. Es hora de reemplazar dinmicamente

    los datos referenciados. Haremos esto, paso a paso, como si de una receta de cocina setratara.

    Primer paso: crear un diccionario de datosEl diccionario de datos es el que contendr, literalmente hablando, un diccionario,indicando cuales referencias deben ser reemplazadas por cules datos, en formadinmica.

    $diccionario=array(

    'Ttulo de la Pgina'=>'POO y MVC en PHP',

    'keywords'=>'poo, mvc, php, arquitectura de software',

    'description'=>'El paradigma de la programacin orientada a objetos con el

    patrn arquitectnico MVC en PHP');

    Segundo paso: obtener la plantilla HTMLPara traer la plantilla HTML, vamos a utilizar la funcin file_get_contents()de PHP,y almacenar el contenido de ella, en una variable.

    $template=file_get_contents('/carpeta/template.html');

    Tercer paso: reemplazar el contenidoEn el anteltimo paso, reemplazaremos los datos, utilizando el bucle foreach de PHPpara recorrer el diccionario, y la funcin str_replace() de PHP, para reemplazar los

    44

  • 7/29/2019 Eugenia Bahit--poo y Mvc en Php

    45/66

    POO y MVC en PHP Eugenia Bahit

    mismos.

    foreach($diccionarioas$clave=>$valor){

    $template=str_replace('{'.$clave.'}',$valor,$template);

    }

    Cuarto paso: mostrar el contenido final al usuarioPor ltimo, imprimiremos el resultado obtenido en pantalla.

    print$template;

    Y con esto, habremos concluido la lgica de la vista, obteniendo en el navegador delusuario, la siguiente salida (vista de cdigo fuente):

    POO y MVC en PHP

    POO y MVC en PHP

    El controlador

    El controlador, aunque muchos de ustedes no lo crean, es quien tal v