Publicado por ShiningRay el 3 de abril de 2006
Edwin Martin < [email protected] >
Traducido por: ShiningRay @ Nirvana Studio
He estado desarrollando aplicaciones PHP durante los últimos cuatro años. PHP es realmente fácil de escribir. Pero PHP también tiene algunos defectos muy graves.
A continuación daré mis razones por las que PHP no es adecuado para sitios web más grandes que los pequeños sitios web de aficionados.
1. Soporte deficiente para la recursividad La recursividad es un mecanismo para que las funciones se llamen a sí mismas. Esta es una característica poderosa que puede convertir algo complejo en algo muy simple. Un ejemplo de uso de la recursividad es la ordenación rápida. Desafortunadamente, PHP no es muy bueno en recursividad. Zeev, un desarrollador de PHP, dijo: "PHP 4.0 (Zend) utiliza un enfoque de pila para datos densos en lugar de un enfoque de montón. Esto significa que la cantidad de funciones recursivas que puede tolerar es significativamente menos limitada que otros lenguajes. Ver error 1901". . Ésta es una muy mala excusa. Todo lenguaje de programación debería proporcionar un buen soporte de recursividad.
2. Muchos módulos PHP no son seguros para subprocesos Hace unos años, Apache lanzó la versión 2.0 del servidor web. Esta versión admite el modo de subprocesos múltiples, en el que una parte del software puede ejecutar varias partes al mismo tiempo. El inventor de PHP dice que el núcleo de PHP es seguro para subprocesos, pero los módulos no centrales pueden no serlo. Pero nueve de cada diez veces, desea utilizar este módulo en un script PHP, pero esto hace que su script sea incompatible con el modo multiproceso de Apache. Es por eso que el equipo de PHP no recomienda ejecutar PHP en el modo multiproceso de Apache 2. El deficiente soporte del modo multiproceso de PHP a menudo se cita como una de las razones por las que Apache 2 sigue siendo impopular.
Lea esta discusión: Slashdot: ¿Sitios que rechazan Apache 2?
3. PHP no funciona por razones comerciales. Al utilizar el almacenamiento en caché, el rendimiento de PHP se puede aumentar en un 500 % [consulte el punto de referencia]. Entonces, ¿por qué el almacenamiento en caché no está integrado en PHP? Debido a que Zend, el fabricante de PHP, vende su propio Zend Accelerator, por supuesto no quieren deshacerse de su producto comercial.
Pero hay otra alternativa: APC (Zend lanzó más tarde Zend Optimizer, un acelerador - traductor gratuito)
4. Sin espacio de nombres Imagine que alguien creó un módulo PHP para leer archivos. Una función del módulo se llama lectura. Luego, el módulo de otra persona puede leer la página web, que también contiene una función de lectura. Entonces no podemos usar estos dos módulos al mismo tiempo, porque PHP no sabe qué función desea usar.
Pero hay una solución muy simple: los espacios de nombres. Alguien sugirió una vez agregar esta característica a PHP5, pero desafortunadamente no lo hizo. Ahora, sin espacios de nombres, cada función debe tener el prefijo del nombre del módulo para evitar conflictos de nombres. Esto da como resultado nombres de funciones terriblemente largos, como xsl_xsltprocessor_transform_to_xml, lo que hace que el código sea difícil de escribir y comprender.
5. Caracteres de formato de fecha no estándar Muchos programadores están familiarizados con los caracteres de formato de fecha, que provienen de los lenguajes UNIX y C. Varios otros lenguajes de programación han adoptado este estándar, pero, curiosamente, PHP tiene su propio conjunto de caracteres de formato de fecha completamente incompatibles. En C, "%j" representa el día del año y en PHP representa el día del mes. Sin embargo, para hacer las cosas aún más confusas: la función strftime y la función date_format de Smarty (un popular motor de plantillas PHP) utilizan caracteres de formato C/UNIX.
6. Licencia confusa Podrías pensar que PHP es gratuito, al igual que todos los módulos PHP mencionados en el manual. ¡Equivocado! Por ejemplo, si quieres generar archivos PDF en PHP, encontrarás dos módulos en el manual: PDF y ClibPDF. Pero ambos tienen licencia comercial. Por lo tanto, para cada módulo que utilice, debe asegurarse de aceptar su licencia.
7. Reglas de nomenclatura de funciones inconsistentes. Algunos nombres de funciones se componen de varias palabras. Generalmente existen tres hábitos de combinación de palabras:
empalme directo: getnumberoffiles
Separar con guiones bajos: get_number_of_files
Ley del camello: getNumberOfFiles
Para la mayoría de los idiomas, elija uno de estos. Pero se usa PHP.
Por ejemplo, si desea convertir algunos caracteres especiales en entidades HTML, usaría la función htmlentities (empalme palabras directamente). Si desea utilizar la funcionalidad opuesta, debe utilizar su hermano pequeño html_entity_decode. Por alguna razón especial, el nombre de esta función tiene palabras separadas por guiones bajos. ¿Cómo podría ser esto? Sabes que hay una función llamada strpad. ¿O es str_pad? Cada vez tienes que comprobar cuál es el símbolo o simplemente esperar a que aparezca un error. Las funciones no distinguen entre mayúsculas y minúsculas, por lo que para PHP no hay diferencia entre rawurldecode y RawUrlDecode. Esto también es malo porque ambos se usan y se ven diferentes, confundiendo al lector.
8. El infierno de las citas mágicas Las citas mágicas pueden proteger los scripts PHP de ataques de inyección SQL. Esto es bueno. Pero por algunas razones, puedes desactivar esta configuración en php.ini. Entonces, si desea escribir un script flexible, siempre debe verificar si las referencias mágicas están activadas o desactivadas. Se supone que esta "característica" facilita la programación, pero en realidad la hace más complicada.
9. Falta de un marco estándar Un sitio web en crecimiento sin un marco general eventualmente se convertirá en una pesadilla de mantenimiento. Un marco puede facilitar muchas tareas. El modelo de marco más popular actualmente es el modelo MVC, en el que la capa de presentación, la lógica empresarial y el acceso a la base de datos están separados.
Muchos sitios web PHP no utilizan el modelo MVC. Ni siquiera tienen marco. Incluso ahora existen algunos marcos PHP y usted mismo puede escribir uno. Los artículos y manuales sobre PHP no mejoran el marco ni una palabra. Si bien los desarrolladores de JSP usan marcos como Struts y los desarrolladores de ASP usan .Net, parece que estos conceptos son ampliamente comprendidos por los desarrolladores de PHP. Esto muestra cuán profesional es PHP en realidad.
Resumir
¿Cuál es el problema?
Para proyectos muy pequeños, puede ser un lenguaje de programación muy satisfactorio. Pero para proyectos más grandes y complejos, PHP muestra su debilidad. A medida que siga explorando, encontrará soluciones a algunos de los problemas que mencioné. Entonces, una vez conocida la solución, ¿por qué no arreglarla? Además, ¿por qué no se mencionan estas correcciones en el manual?
Es bueno que un lenguaje de código abierto sea muy popular. Pero lamentablemente no es un gran idioma. Espero que todos los problemas se resuelvan algún día (¿tal vez en PHP6?), y entonces tendremos un lenguaje de código abierto que sea a la vez de código abierto y fácil de usar.
A estas alturas, cuando desee iniciar un proyecto con más de 5 páginas de script, será mejor que considere C#/ASP.Net o Java/JSP o tal vez Python también sea una mejor opción.
Fuente de este artículo: http://workgroup.cn/CS/blogs/php/archive/2006/06/29/1354.aspx