Está en la página 1de 41

Herramientas y trucos para programar en PHP5

Trucos, consejos y herramientas


para usar con php

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Tecnologías involucradas en la Web.

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Proyecciones de la Web.

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Factibilidad para el desarrollo de Aplicaciones Web.
• ¿Cuánto cuesta encontrar un programador que sepa todo eso?

• ¿Cuánto cuesta mantener toda esta mezcla de multilenguaje?

• ¿En cuanto tiempo puede ofrecer al cliente un prototipo de la aplicación?

• ¿Cuanto tiempo necesita para cambiar toda la interfaz de usuario de la aplicación 

a las necesidades del cliente?
• ¿Puede  garantizar  que  la  aplicación  cumpla  con  los  estándares  y  normativas  de 

accesibilidad, reusabilidad y operatividad de la Web?

¡Si no sabes responder a estas preguntas con respuestas a tiempos 

cortos, prácticos y razonables, ya entiendes el gran problema!

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Hablemos de PHP.
• Originalmente PHP fue siglas de Personal Home Page Tools.
• Creado en 1995 por Rasmu Lerdorf.
• Año 1997, cambios significativos.
• Al redefinirse el motor recibió las siglas del acrónimo Hypertext Pre Processor
• PHP 3, creado por Andi Gutmans y Zeev Zuraski.
• Motor Zend.
• PHP 4 (año 2000).
• PHP 5 (año 2004).
• Está previsto el lanzamiento en breve de la rama 6 de PHP.
• PHP 4 perderá su estado de estable el 31 de diciembre del 2007.

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5


Modelos de programación
– MCV (Model­Controller­View)
– Pattern Designs
– REST (Representational State Transfer)

Entornos de desarrollo
– Komodo IDE
– Eclipse PDT

Herramientas de programación
– Xdebug
– Subversion+Subclipse

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Introducción a PHP5.
• Soporte sólido para Programación Orientada a Objetos (o OOP) con PHP.
• Data Objects.
• Mejoras de rendimiento.
• Mejor soporte para MySQL con extensión de rewrite completa.
• Mejor soporte a XML (XPath, DOM, entre otros).
• Soporte nativo para SQLite.
• Soporte integrado para SOAP.
• Iteradores de datos.
• Excepciones de errores.

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Programación Orientada a Objetos.
• Herencia
• Implementación
• Polimorfismo
• Encapsulamiento
• Abstracción
• Envío de mensajes
• Agregación
• Composición
• Métodos
• Propiedades

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

PHP5 y Programación Orientación a Objetos.
PHP5 soporta una gran cantidad de funcionalidades para OOP.
• Métodos constructores y destructores.
• Métodos setter y getter.
• Métodos mágicos.
• Clases, objetos y variables estáticas, privadas y protegidas.
• Clases abstractas.
• Interfaces.
• Abstracción de datos.
• SPL.
• Clases extendidas, excepciones, iteradores.

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

MVC (Model view controller).

1) Patrón de diseño orientado a objetos.
2) Describe  cualquier  aplicación  con  interacción  humana  y  es  particularmente 
adecuado para aplicaciones Web.
3) Separa clara y consistentemente las "preocupaciones":
1) Modelo (Model) ­ Interacción con los datos.
2) Vista (View) ­ Presentación de la información al usuario.
3) Controlador (Controller) ­ Flujo de información y procesos.

Si su aplicación no está diseñada siguiendo MVC, inevitablemente tendrá problemas 
de escalabilidad, de mantenimiento y de extensión.

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

El Camino MVC en 10 pasos
1. Desarrollas proceduralmente según tu manual de 10 días de php3, mezclas HTML, 
código de conexión a la base de datos, loops sobre resultsets, lógica condicional, 
estilo (css) en una misma página.
2. Te das cuenta que si abstraes proceduralmente la lógica de conexión a datos 
(conectar, consultar, insertar, borrar) podrás cambiar de DB sin traumas (eso dices 
tú).
3. ¿Si abtraes la lógica también, no será mejor?, nacen los includes infinitos!
4. ¿Y si centralizo esta clase en un objeto?, puedo tener varias instancias!
5. Creo que la clase hace mucho, ¿por que no la separamos y reducimos el acoplamiento 
de los objetos?
6. Dos objetos diferentes tienen propiedades similares, ¿Por qué no una clase abstracta?
7. Puedo gestionar todo desde una clase única de registro?, configuraciones únicas y 
Controladora Frontal

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

El Camino MVC en 10 pasos
8. Te das cuenta que si separas el código HTML de las clases de la aplicación, puedes 
tener otros tipos de vistas (pdf, xml, wsdl, gtk, etc).
9. Tu gran aplicación consiste en miles de clases, unidas entre sí (alta cohesión) en 
distintas capas (n­tier), con pocas relaciones entre ellas (bajo acoplamiento), que 
interactuan unas con otras sin conocerse (alta composición), muy genéricas (baja 
implementación) y con estándares seguros sobre ordenamiento, nombres de 
funciones (interfaces) y seguimiento de patrones.
10. Felicidades!, haz llegado a MVC! ... y ahora ... que?

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Patrones de diseño.
Los patrones son simples soluciones a problemas recurrentes que ocurren una y otra 
vez en nuestro entorno.
Luego de llegar a la solución, encapsulamos todas las variables y factores para llegar 
a la solución y disponemos de una “receta” para resolver mil veces el problema sin 
tener que “reinventar la rueda”.
Los desarrolladores los usan como una forma de reutilizar la experiencia, 
clasificando las soluciones bajo “terminos” de común denominación
Un diccionario?, eso lo haces con un singleton+registry pattern.
Causando además, un idioma común entre programadores de distintos lenguajes.

Uno de los principales precursores del movimiento


acerca de los Design Patterns fue Martin Fowler.

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Ideas básicas en el desarrollo de aplicaciones.
Lo que se logra en toda aplicación, al implementar patrones es que, en
Conjunto con la programación Orientada a Objetos (OO):

encapsulemos la lógica de la aplicación de tal manera que sea 
innecesario pensar a bajo nivel.
(tendré que escribir una función que haga eso?)

desviarse de la lógica de mi aplicación.
(para implementar ajax debo usar otra cosa?)

Preocuparse únicamente por la “operatividad de la aplicación” 
(funcionará esa implementación de roles y seguridad que me “inventé”?).

Lograr una flexibilidad sin límites
(me funcionará ese objeto en otro proyecto futuro?).

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Clasificación de los patrones de diseño.

De creación:
Como se crean instancias de los objetos y/o como se implementan
• Singleton, Multiton, facade
Estructurales:
Como se relacionan y combinan las clases para crear nuevas estructuras
• Abtract Factory, Visitor, Facade, flyweight, adapter
de Comportamiento:
Como interactuan y cooperan las clases
• Decorator, Memento, Chain of Responsability, flyweight, adapter

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Clasificación de los patrones de diseño.

De ámbito:
De Como se utilizan dinámicamente los Objetos
• Delegator, Observer, Interpreter, Visitor
De Operación
De como se comportará la aplicación
• Business Logic, Proxy Adapter, Front Controller, Model­View Controller

¡Desarrollo rápido de aplicaciones!
MVC con PHP5.
Herramientas y trucos para programar en PHP5

Clasificación de los patrones de acuerdo a la capa MVC.

Capa de Datos (Data Layer)
• ORM – ActiveRecord
• Data Layer
• Delegator

Modelo (Lógica)
• Abstract Factory y Registry
• Value Object
• Business Delegate
• Aggregate Entity
• Service Locator
• Strategy

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Clasificación de los patrones de acuerdo a la capa MVC.

Controladora
• Inherit Application Controller
• Front Controller
• Delegate Controller
• Service Controller

Vista
• Decoration Filter
• Helper View
• Composite View
• Template View
• Dispatcher View

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Patterns Design: the Real Life!
Memento+singleton ­> Gestión de deshacer,rehacer,historia, transacciones

Facade ­> Gestión de documentos de varios tipos en una misma interfaz

Facade + Adapter ­> Una única interfaz de acceso para múltiples bases de datos

Singleton + Registry ­> Sistemas de Diccionario, i18n (Internacionalización), 
Registros de Sistema y configuración.

Abstract + Composite+Helper View ­> Construcción de vistas complejas a 
partir de archivos sencillos

Observer + State ­> Sistema de gestión online de usuarios

Decorator + Composite ­> sistemas de reportes

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Patterns Design: the Real Life!
Abstract Factory + Singleton ­> Fabrica abstracta de controles complejos

Flyweight ­> Gestión de vistas y uso de class (CSS) y IDREF (xml)

Iterator+Data Layer ­> Explorar datos dentro de los objetos sin iterar sobre el 
objeto en si (ej. Explorar sobre los datos de una DB usando FOREACH).

Singleton + Decorator + Hierarchical Visitor ­> Gestión de usuarios y Roles

Composite + Facade + Interpreter ­> Gestores de idiomas especializados, 
parsers de funciones

Session Facade + Delegator ­> Loggers y gestores de sesiones de usuario

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Diagrama de clase (Patrón Strategy).

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Diagrama de secuencia (facade)

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Patrones Data Layer, ORM y ActiveRecord.

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Un ejemplo Desglosado (Memento):
Necesidad:

Retornar un estado previo 
de una operación 
(operaciones “undo” o 
“Rollback”)

Retonar a estados 
“especificos” del objeto 
(History)

Crear estados de 
“guardado temporal” o 
“Check points”
¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Un ejemplo Desglosado (Memento):

Sumario: (Qué debemos identificar):

Identificar la clase que posee la “habilidad” de tomar un “snapshot” de si 
misma. (clase con el rol “Originator”).

Diseñar una clase que no hace nada más que que aceptar y entregar los 
distintos “snapshots” de objetos (clase con el rol “memento”).
● Diseñar una clase “gestora” a la cual el “originator” puede preguntar para 
que retorne un “estado”; puede causar que el “originator” vuelva a estados 
previos (clase con el rol “caretaker”).

La clase cliente (Originator) sabe “cuando” debe salvarse su snapshot

La clase cuidadora (CareTaker) sabe “como” debe guardarse el snapshot

La clase contenedora (memento) sabe “donde” debe guardarse el snapshot

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Un ejemplo Desglosado (Memento):

Estructura:

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Un ejemplo Desglosado (Memento):

Estructura: (Continuación):
Diagrama de Secuencia:

El objeto (originator) pide un “checkpoint” o revisión inicial a su 
custodio (caretaker)

El custodio (caretaker) toma el objeto actual y guarda una copia en 
una clase estática memento (Set).

Si el cliente desea un “rollback” o deshacer una acción, simplemente 
le solicita al custodio retornar a un estado previo y este “extrae” del 
memento el estado solicitado; borra de memoria (haciendo el 
checkpoint respecto para posibles “redo”) el Originator actual y lo 
reemplaza con el extraido desde el memento.

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Un ejemplo Desglosado (Memento):
Implementación:

Cada objeto puede llamar “estáticamente” a un “memento object” (Checkpoint State) 
usando una clase “pasarela” llamada Caretaker, que toma las funciones de 
monitorización del objeto base (Originator); inicialmente el objeto crea una copia de 
si mismo dentro del memento (primer estado).

Memento Object puede simplemente recibir (en un arreglo estático) nuevas copias 
(snapshots) del objeto base (Originator) e indizarlas para su obtención rápida 
(unlimited undo y lista de historia).

Memento debe ser “opaco”; es decir, solamente debe saber que guardó un estado de 
un objeto, sin averiguar que tipo de objeto guardó (Claro que guardando el índice de 
“a quien” guardó); adicionalmente, el cliente (Originator) desconoce la naturaleza del 
memento (se entiende con él a través del “caretaker”).

Para más implementaciones les recomiendo que visiten
www.phppatterns.com

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

El modelo n­tier de MVC.

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Frameworks

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

De lo horrible a practico :: Frameworks
Un Framework, “Marco de Trabajo” o WAF (Web Application Framework), es una 
serie de librerías (toolkits) que se han unido bajo un único esquema de 
colaboración para que de manera rápida (RAD: Rapid Application Development) 
logremos desarrollar nuestras aplicaciones.

Entre las ventajas se cuenta:
• No hay que definir “marco de desarollo”, solo “rellenar” los huecos que los 
frameworks nos indican.
• Trabajamos sobre un Estándar que miles de personas ya conocen.
• Facilidad para encontrar herramientas, librerías o documentación.
• Relación Coste de aprendizaje vs. Aplicabilidad mínima

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

De lo horrible a practico :: Frameworks
Algunos Framework MVC
• KumbiaPHP
• Solar
• CakePHP
• CodeIgniter
• Symfony
• PHP on Trax
• Zend Framework
• Agavi

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

REST (Representational State Transfer)

REST hace uso de una API simplificada de acceso, mediante el marcado 
del método de acceso usando una marca de contenido HTTP, las 
transmisiones pueden ser:
• GET
• POST
• HEAD
• DELETE
• PUT
• OPTIONS

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Entornos de desarrollo

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Entornos de desarrollo: Eclipse PDT

Eclipse es un interesante entorno de desarrollo hecho en java, que 
permite escribir código en php5, soporta todas las características del 
lenguaje, además de soportar:
• Debugging (combinado con xdebug)
• Autocompletado de código de usuario
• Gestión de proyectos
• Conexión a servidores de subversion (SubClipse)
• Comentarios PHP Doc

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Entornos de desarrollo: Komodo Edit 5

Komodo es un entorno integrado y editor de código hecho en C++; muy 
ligero, usa XULRunner para la construcción de interfaz de usuario lo 
que lo hace más veloz que Eclipse, además tiene soporte para más 
lenguajes (perl, python y ruby, entre otros).
Soporta:
• Debugging (combinado con xdebug)
• Autocompletado de código de usuario
• Gestión de proyectos

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Herramientas de desarrollo

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Cruise Control
● CruiseControl es una aplicación de código abierto
basado en Java que permite la compilación automática
de proyectos Java, utilizando Ant o Maven.
● Es una herramienta comúnmente utilizada en
integración continua que cada cierto tiempo, o cuando
hay cambios en el gestor de versiones (por ejemplo
CVS o Subversion), hace una compilación y ejecuta
tests (más cualquier otra cosa que esté configurada en
Ant o Maven) y una vez acaba presenta el resultado.
Esta presentación puede ser en HTML, por correo
electrónico, RSS, Jabber, etcétera.

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

Conclusiones

● ¿Tú que vas hacer? ¿Te vas a quedar


donde estas o te subes al tren?
● ¿Eres parte del problema o parte de la
solución?

¡Desarrollo rápido de aplicaciones!
Herramientas y trucos para programar en PHP5

¡Gracias por su atención!


Deivinson Tejeda / Jesús Ignacio Lara 
Celular: 0416 5389807 / 0426 4568828
Celular:
Correo: deivinsontejeda@gmail.com / jesuslarag@gmail.com
 /

Blog: 
http://www.jesuslara.com.ve/blog/
http://cachi.temiga.org

¡Desarrollo rápido de aplicaciones!