Yo sugeriría que se familiarice con la historia de PHP, sé que al hacerlo me ha dado una apreciación mucho mayor de lo que PHP es hoy en día y donde ha venido.
En resumen, PHP fue escrito por Rasmus Lerdorf para proporcionar funciones simples de envoltura para el código C que en realidad estaba haciendo el trabajo pesado para poder tener un lenguaje/sintaxis más simple para escribir plantillas que necesitaban comportarse dinámicamente. El crecimiento de PHP y la comunidad que lo rodea se describe mejor como orgánico. Y al igual que otras cosas que crecen orgánicamente, es más que un poco desordenado, asimétrico y francamente no congruente.
Una vez que entienda PHP y su comunidad, es necesario abrazar PHP para todo lo que es y todo lo que no lo es. Esta idea fue mejor presentada por Terry Chay en su artículo PHP without PHP.Está hablando específicamente sobre el concepto de almacenamiento en caché funky, pero captura el concepto de codificación de PHP como si fuera PHP y no (inserte el idioma favorito aquí) mejor que nadie que haya visto. En otras palabras, no trates de convertir PHP en Java, C#, Ruby, etc. porque si lo haces fracasarás y odiarás tu vida.
Tome un vistazo a How is PHP Done the Right Way?.
hay que decir que usted debe primero, último, y siempre evitar la tendencia de la mayoría de los desarrolladores de PHP que comienzan a utilizar el anti-patrón de spaghetti-código. En otras palabras, si encuentra que está escribiendo código que contiene consultas sql, manipulación de datos, validación de datos y salida html todo en un solo script php, entonces lo está haciendo mal.
Con el fin de evitar esto, será útil para aprender algo acerca de la naturaleza de los patrones de diseño orientado a la web. Esto, por supuesto, impide familiarizarse con la programación orientada a objetos. Pero una vez que haya aprendido los conceptos básicos de la programación orientada a objetos en PHP, estudie el patrón de diseño MVC. No tiene que implementar esto exactamente, pero usar las ideas básicas de Model-View-Controller le permitirá evitar el problema del script de blob que la mayoría de los novatos tienden a crear.
En este punto, yo recomendaría encarecidamente que se tome cualquier fragmentos de código que encontrará en la web con un grano de sal. E incluso si lo encuentras en un libro, deberás considerar la antigüedad del libro. PHP como lenguaje ha avanzado bastante y no puede tomar muestras de código a su valor nominal porque, dependiendo de su edad, pueden estar utilizando soluciones alternativas que eran válidas en 3.x o 4.x pero que simplemente ya no son necesario con nuevas características.
Una gran cosa que hay que hacer es estudiar los distintos frameworks que existen. Evalúa lo que te gusta y lo que no. Tal vez incluso trabaje en cada uno de los inicios rápidos que se proporcionan con la documentación del marco para que pueda comenzar a tener una idea de lo que le gusta y lo que no le gusta. Y le recomiendo encarecidamente que revise el código de los marcos, así como otros muchos proyectos de código abierto para que pueda hacerse una idea de cómo otros hacen cosas en PHP. De nuevo, tómenlo todo con un grano de sal porque cada desarrollador de PHP tiene sus propios manías y sus propios matices y ninguno de nosotros tiene razón todo el tiempo. De hecho, la mayor parte del tiempo con PHP habrá varias formas bastante buenas de hacer algo.
Si desea obtener una mejor comprensión de los patrones que están siendo implementados por los marcos y son comúnmente lanzados en la lengua vernácula común en SO, sugiero que lea Fowler y GoF. Enseñarán todo sobre los patrones básicos de diseño que usará en sus esfuerzos de desarrollo.
ver Específicamente para lo siguiente: archivos
- de función que contienen gran cantidad de funciones. Esto probablemente sea representativo de la necesidad de poner funciones directamente en las secuencias de comandos que las necesitan o también puede indicar una oportunidad para crear algunas funciones más genéricas que se pueden realizar para cumplir las funciones de un par de funciones altamente específicas. Por supuesto, si está creando clases coherentes y bien encapsuladas, no debería encontrarse con este problema.
- La clase de hacer todo. Este es un blob anti-patrón y es realmente desagradable. En este caso, debe identificar dónde se descomponen la cohesión y la encapsulación y utilizar esos puntos como oportunidades para dividir la clase en varias clases más pequeñas y más fáciles de mantener.
- Consultas SQL que no usan consultas parametrizadas o al menos escapan parámetros. Muy, muy, muy mal.
- Cualquier instancia donde la validación no se está realizando o solo se realiza en el lado del cliente.Al desarrollar para la web, la única forma de mantener la seguridad de su sitio y de sus usuarios es suponer que todos los demás son un sombrero negro.
- Un deseo repentino y obsesivo de utilizar un motor de plantillas. PHP es un lenguaje de plantillas. Asegúrese de tener razones claras para agregar otra capa en su sitio web antes de usar un motor de plantillas.
Para la lectura adicional por favor, mira el siguiente:
PHP Application Design Patterns
Defend PHP - útil para darle una idea de las críticas más comunes.
Security of strip_tags and mysqlirealescapestring
What should Every PHP Programmer Know
How to Structure an ORM
Best Way to Organize Class Hierarchy
Main Components/Layers of PHP App
Why use Framework for PHP
Recommended Security Training for PHP
Me gusta cómo advierte para los motores de plantilla. Nunca entendí por qué las personas lanzaban un motor de plantillas a un lenguaje que se diseñó como un lenguaje de plantilla. –
Hola Gabriel, Gracias por la respuesta detallada. Realmente aprecio tu forma de pensar Estoy muy familiarizado con todos los patrones de diseño. Comencé mi carrera en Java y luego me mudé a C# y ASP.NET World. He utilizado la mayoría de los patrones de diseño cuando corresponde. Ahora, como arquitecto, quiero poner en práctica algunas buenas prácticas y metodologías de codificación, ya que tengo algunas aplicaciones de php junto con las aplicaciones .net. No quiero imponer las mismas restricciones en PHP por las razones que mencionaste anteriormente. –
, ¿estás diciendo que usar plantillas como SMARTY es solo una pérdida de tiempo y energía? –