En este artículo te traigo una reseña de un libro viejo pero bueno: PHP In Action, de la editorial Manning, escrito por Dagfinn Reiersol, Marcus Baker y Chris Shiflett.
Este libro ha marcado mi carrera como programador y si bien actualmente tiene partes que han quedado un poco desactualizadas, me sigue pareciendo una obra imprescindible para cualquier programador PHP.
Contenido
Un libro que hace la diferencia
En el mundo PHP siempre ha habido un gran problema. La facilidad de aprendizaje del lenguaje ha sido un arma de doble filo.
Por un lado, permite que mucha gente comience a utilizar la herramienta. Pero por otro lado da la oportunidad de escribir código inseguro, poco mantenible e ineficiente.
Durante años, los programadores PHP se han dividido en dos grandes grupos: los amateur y los profesionales. Yo siempre me ubiqué en el segundo grupo, intentando aprender el lenguaje hasta el último detalle, evitando «tocar de oído» y buscando siempre escribir código de calidad.
Existen algunas obras de referencia para escribir PHP de la manera correcta. Una de ellas es justamente PHP: The Right Way, una guía online y gratuita con buenas prácticas de programación de PHP.
En mi opinión, la otra gran obra es PHP In Action.
PHP In Action fue publicado en 2007 y no ha habido nuevas ediciones hasta la fecha. Una parte importante del libro ha quedado desactualizada, pero los conceptos detrás son tan buenos que hacen que la obra sea imperecedera.
¿De qué se trata PHP In Action?
El tema fundamental de PHP In Action es PHP y programación orientada a objetos, con un enfoque profesional.
Se tratan aquellos conceptos y técnicas que por el tiempo en que fue publicado el libro estaban más estrechamente ligados a Java y C#. Esta obra te muestra utilizar PHP para convertirlo en una herramienta profesional.
Por lo tanto, en PHP In Action se abordan temas como programación orientada a objetos aplicada a PHP, patrones de diseño, diseño orientado a objetos, refactorización y testing. Esto lo complementa con una tercera parte enfocada en la aplicación de estos temas en problemas comunes como validación de entrada de datos, manejo de formularios y conexión a bases de datos.
Los temas de PHP In Action por capítulo
Primera parte: herramientas y conceptos
El primer capítulo es simplemente una introducción al libro, con las ventajas de utilizar PHP y la presentación de algunos de los temas de programación que se verán más adelante, como orientación a objetos y refactorización.
El segundo capítulo se mete de lleno con la programación orientada a objetos en PHP. Como el libro es algo viejo, se hace hincapié en los cambios entre PHP4 y PHP5. También hay comparaciones con Java, lo cual es natural, teniendo en cuenta que muchos de los conceptos y técnicas que se aplican en este libro están extraídos de los avances que se habían alcanzado en este otro lenguaje.
A lo largo de la obra vas a encontrar diagramas UML, tanto de clases como de secuencia. Es mejor estar familiarizado con este tipo de diagramas para comprender mejor los conceptos, pero si nunca viste nada de UML, igualmente vas a poder comprender todo.
El tercer capítulo tira toda la carne al asador en cuanto a orientación a objetos. Entra la visibilidad de atributos y métodos y se explican conceptos como encapsulación. Luego, métodos estáticos y constantes de clase. Como si fuera poco, este libro explica el Type Hinting que se empezó a utilizar muchísimo en PHP a partir de la versión 5 y que en mi opinión lo convirtió en una herramienta más formal. Para cerrar, interfaces y su aplicación en PHP.
El cuarto capítulo se mete con temas vinculados a diseño. Aquí aparece el polimorfismo y su utilidad. Se enumeran y explican algunas de las ventajas del buen diseño.
El quinto capítulo trata sobre dos temas fundamentales en la programación orientada a objetos: herencia y composición. Se explican ambas técnicas con clases e interfaces. Y se cierra con el consejo de todo libro de POO: favorecer composición por sobre herencia.
El capítulo 6 es sobre los famosos principios SOLID aunque le presta mayor atención al OCP (Open-Close Principle), SRP (Single Responsibility Principle) y DIP (Dependency Inversion Principle).
El siguiente capítulo, el 7, es sobre patrones de diseño. Se explican Strategy, Adapter, Decorator, Null Object, Iterator y Composite.
El último capítulo es un ejemplo práctico de cómo usar todo lo aprendido para crear un paquete que se encargue de manejar fechas y tiempo.
Segunda parte: Testing y Refactorización
El capítulo 9 comienza con una de mis técnicas favoritas de programación: TDD (Test-driver development). La famosa estrategia de escribir primero las pruebas y luego ir generando el código en base a ellas.
Lamentablemente, los autores de PHP In Action consideraron que SimpleTest era la mejor opción como framework de pruebas, sobre PHPUnit. 17 años después, PHPUnit, de Sebastian Bergmann, es el framework de pruebas de facto de PHP y lo ha sido durante muchos años ya. Sin embargo, los frameworks de testing son todos muy parecidos y es fácil comprender el código.
En este capítulo se explica la famosa secuencia red, green refactor, vital en TDD.
El capítulo 10 sigue con el tema del testing, pero se pone un poco más complicado. Aquí la idea es mockear, es decir, simular las dependencias de las clases con la que trabajamos para probarlas mejor. Se explica también el tearUp y tearDown de las pruebas para configurar cómo queremos que comiencen y qué queremos que suceda cuando terminen de correr.
El siguiente capítulo es sobre refactorización, es decir, mejorar el código existente. Comienza con mucha teoría y luego pasa a consejos básicos como mejorar la legibilidad del código y eliminar la duplicación.
A continuación, hay algunas técnicas que se aplican especialmente a PHP como separar el HTML del código PHP. También se explica cómo simplificar expresiones condicionales y como refactorizar para pasar de código estructurado a orientado a objetos, siempre apoyándose en pruebas automatizadas.
El último capítulo de la segunda parte es el capítulo 12. Aquí nuevamente se intentan bajar todos los conceptos anteriores a algo más práctico. El ejemplo en este caso es un buscador de contactos que implica el uso de formularios. El cierre de este capítulo es sobre cómo refactorizar legacy code.
Tercera parte: Construyendo la interfaz web
Esta sección del libro se enfoca más en la interacción con el usuario. Es por eso que, quizás, algunos temas puntuales, han quedado algo obsoletos. Esto ocurre porque una parte importante de las apps hoy en día consisten en dos partes: un backend y un frontend. Si bien en el servidor PHP sigue dando batalla, lo cierto es desde hace ya años, el frontend es potestad exclusiva de HTML, CSS y los diferentes frameworks de JavaScript como React y Vue.
El capítulo 13 es sobre la importancia de separar el código PHP del HTML, algo que increíblemente al día de hoy se sigue encontrando en algunos proyectos de PHP y que hace que el lenguaje tenga tan mala fama. Este libro en el 2007 ya venía pidiendo a gritos detener esta práctica. En este capítulo se presentan algunos template engines como PHPTAL y Smarty.
El capítulo 14 se titula «Construyendo páginas webs complejas» pero en realidad no es tan complicado como puede sonar. Aquí se explica cómo aplicar el patrón composite para armar vistas compuestas.
El capítulo 15 explica el famoso patrón MVC y el Web Command pattern que es básicamente el núcleo del funcionamiento de los frameworks modernos. Super recomendado si te interesa este tema.
El capítulo 16 sigue estos temas, pero se centra principalmente en los controladores. Nuevamente, si te interesa conocer la estructura interna de los frameworks, este capítulo resulta muy didáctico. Personalmente, recomiendo que, además de leer el capítulo, escribas alguna estructura que involucre un FrontController. Es un sano ejercicio que te hace dar cuenta que no existe tal cosa como la magia dentro de un framework.
El capítulo 17 es sobre validación de entrada de datos. Al principio, trata temas generales explicando estrategias y dando algunos consejos. Explica también los grandes desafíos de la validación del lado del servidor. Sin embargo, lo que más me gusta de este capítulo es el enfoque objetoso que le da sobre el final.
El capítulo 18 hace algo similar al de la validación objetosa, pero en este caso con manejo de formularios. Los autores crean una clase para manejar forms utilizando conceptos de orientación a objetos. Un capítulo nuevamente muy recomendado y un ejercicio interesante, nada difícil de hacer, pero que te puede hacer aprender mucho tanto de los conceptos POO como de PHP.
El capítulo 19, es acerca de abstracción en las conexiones a las bases de datos y su configuración. Aquí se presentan los prepared statements y se explica el uso de PDO. Luego, se ve algo sobre cómo usar iteradores para recorrer los resultados de una búsqueda. En cuanto a instanciación y conexión a bases de datos aparece el patrón Singleton, el ServiceLocator y el Registry.
La siguiente sección de PHP In Action es sobre bases de datos. Si te preguntás por qué este último capítulo no está en esa sección, es porque en realidad es sobre cómo el sistema interactúa con la base de datos y no sobre bases de datos. De hecho, varios de los patrones que se explican son justamente los que utilizan los frameworks.
Cuarta parte: bases de datos e infraestructura
El capítulo 20 del libro es sobre objetos y SQL. Es decir, cómo utilizar objetos para construir consultas de SQL. Nuevamente, se aplican los conceptos de programación orientada a objetos para construir clases que resuelven este problema.
El capítulo 21 intensifica la idea y lo que busca crear es un Table Data Gateway para acceso a datos. Este es un patrón con el que seguramente estés familiarizado. Luego, se explica el otro patrón habitual en estos casos que es cuando un objeto se persiste así mismo que es el Active Record. Finalmente, se explica el Data Mapper Pattern, que es un poco la estrategia opuesta.
Apéndices
PHP In Action cuenta con dos apéndices. El primero son consejos para utilizar las librerías de testing SimpleTest y PHPUnit. Yo no le prestaría más atención a este apéndice. Creo que ha quedado obsoleto.
El segundo apéndice es sobre seguridad y enumera algunos temas clásicos de programación web que hay que tener presentes: filtrado de datos de entrada, ataques XSS e inyecciones de código. Todo demasiado por arriba. Si te interesa aprender sobre seguridad web, te recomiendo que leas el review de Web Application Security, de Andrew Hoffman.
¿Vale la pena leer PHP In Action en 2024?
Yo creo que sí, a menos que encuentres una obra sobre PHP que trate estos mismos temas, al mismo nivel, pero con una versión de PHP8.
Los temas de programación orientada a objetos son fundamentales y exceden a PHP. Son excelentes para comprender cómo funcionan los frameworks por dentro.
Por supuesto que los conceptos vienen de los patrones originales creados por la Gang of Four (GoF: Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides). Sin embargo, la adaptación realizada por los autores Dagfinn Reiersol, Marcus Baker y Chris Shiflett es excelente.
Y mucho más importante es su objetivo: mostrarte que PHP puede ser una herramienta profesional y que un programador PHP, si estudia y aplica las técnicas correctas, puede estar a la altura de cualquier otro programador.
¿Dónde conseguir PHP In Action, de Manning?
No recuerdo cuándo compré este libro, pero creo que fue alrededor de 2010. Mi hermano me lo trajo de un viaje a Estados Unidos.
Este es un libro que ya no se edita, pero lo podés conseguir en formato digital.
No le hagas caso a los malos reviews. Es de gente que no entiende nada.
Más contenido sobre programación y modo de vida freelancer en Crónicas Freelancer
Espero que este artículo haya sido de tu interés. Si tenés alguna duda o querés hacer algún aporte, dejame un comentario.
Si estás buscando hosting, te recomiendo Digital Ocean. Seguí este enlace para obtener US$ 200 de crédito para usar en un periodo de 60 días.
Te invito a que me sigas en las redes: LinkedIn, X, GitHub e Instagram. También estoy en CodeWars.
Eso es todo. Muchas gracias por tomarte el tiempo de leerme.
Hasta la próxima.