importar - No PHP para grandes proyectos? Por qué no?
importar pdf en php (11)
He leído algunas publicaciones donde las personas han declarado (no sugerido, no discutido, no ofrecido) que PHP no debería usarse para proyectos grandes.
Siendo un desarrollador principalmente PHP, hago dos preguntas:
- ¿Qué define un "gran proyecto"?
- Por qué no? ¿Cuáles son los peligros de usar PHP?
Dirijo un pequeño equipo de desarrollo y sé por experiencia que la construcción de calidad, la organización, la documentación, los comentarios y la encapsulación son nuestra principal prioridad. Podemos desarrollar grandes proyectos utilizando nuestro propio marco y enfoque, pero aún así, no quiero invertir más si estoy perdiendo el tiempo.
¿Pensamientos?
Nuestra compañía ejecuta varios sitios web grandes usando PHP y no ha tenido problemas relacionados con el idioma.
Estas son todas buenas respuestas.
Yo era un novato Solo he estado codificando durante 5 años, pero apoyo y administro directamente 85 sitios web pequeños y grandes, y les diré una cosa, el potencial para ser demandado al tener un sitio web inactivo por un día contribuirá mucho a su deseo de aprender cómo y hacer un mejor código.
Es agradable escuchar a desarrolladores establecidos compartir sus opiniones sobre este asunto. No creo que PHP sea el mejor, pero parece que mi inversión en "mejores prácticas" está bien servida.
¡Gracias a todos!
No hay ninguna razón por la que no puedas usar PHP para proyectos grandes. Después de todo, Facebook se basa en PHP. Sin embargo, habrá problemas, pero hay problemas con cualquier proyecto grande.
Lo que hace que PHP sea tan omnipresente es la baja barrera de entrada y el alojamiento barato. Se ejecuta como una extensión de Apache y prácticamente puede comenzar a codificar. Si va a más plataformas empresariales, como .Net o Java, tienen una barrera de entrada mucho más alta, pero también vienen con una gran cantidad de infraestructura para ayudarlo a realizar aplicaciones a escala.
Por ejemplo, la abstracción de la base de datos en PHP es (imho) lamentable. Es específico del vendedor. Con MySQL, la gente tiende a hacer cosas como:
function get_users($surname) {
mysql_query("select * from users where surname = ''$surname''");
...
}
lo cual es malo por varias razones:
- Hace un uso pobre de la memoria caché de consultas;
- No maneja el escape de caracteres (que, por supuesto, se puede hacer con
mysql_escape_string()
pero te sorprenderá la frecuencia con la que la gente no hace esto); y - Es bastante fácil codificar de tal manera que permita los ataques de inyección SQL.
Personalmente prefiero mysqli por todos los motivos anteriores, pero tiene sus propios problemas: es decir, que el uso de campos LONGTEXT bloquea mysql y lo ha hecho desde al menos el 2005 sin todavía ninguna corrección (sí, yo y varios otros han provocado un error).
Compare esto con Java (con el que estoy más familiarizado) y JPA o Ibatis son soluciones mucho mejor ORM con mayores costos de inicio, pero que le ayudarán en una escala empresarial.
Entonces no tiene prohibido realizar grandes proyectos en PHP. Simplemente es más difícil en el sentido de que tienes que trabajar cada vez más para replicar lo que otras plataformas te brindan.
Dicho esto, PHP + memcached / APC + beanstalkd va un largo camino.
Oh, ese es el otro problema: PHP realmente no admite el procesamiento de fondo o el enhebrado. Necesitas algo más para eso (o scripts independientes). Si está utilizando algo más, ¿por qué no usarlo también para el contenido web (por ejemplo, Java, Ruby, .Net, etc.)?
Para mí, el peor pecado de PHP es el acoplamiento de la presentación con la lógica comercial. No es que no puedas escribirlo de una mejor manera, pero no te alienta, y si algo te anima a no hacerlo.
Un gran número de vulnerabilidades de seguridad están asociadas con sitios PHP, también. No puedo probar que sea desproporcionado (después de todo, muchos sitios están escritos en PHP), pero sospecho que sí. Si estoy en lo cierto, entonces dado que las vulnerabilidades de seguridad son una clase de error, sospecho que los sitios PHP tienden a tener más errores en general también.
(No creo que señalar algunos sitios grandes y decir que lograron hacerlo en PHP sea un argumento en contra de esto, por cierto. Es como decir que los cigarrillos no causan cáncer porque el vecino de al lado fumó y vivió para ser 100.)
Para mí, y hablando de proyectos grandes o incluso grandes, (principalmente) se reduce a una sola palabra: Dependencias .
El problema con un lenguaje de scripting es como en todo el mundo: la mayor ventaja es la mayor desventaja al mismo tiempo.
La mayor ventaja es codificar gratis y rápido. Simplemente escriba un script y servirá su propósito. No se necesita verbosidad, simplemente código.
La mayor desventaja es, de alguna manera, verificar si este script no está alterando otros scripts. O mejor: cambie un viejo guión en el que otros confíen. ¿Estás seguro de que todas las dependencias funcionan como deseas?
Esto no es cierto para la generación de páginas web "normales", cualquiera que sea el medio normal aquí. Pero tenemos un producto que confía en unas 500k líneas de código fuente, con personalizaciones para clientes que consisten en 100k líneas adicionales de código, también. Y estoy mortalmente contento de que un compilador compruebe todas las dependencias y me advierta / errores en caso de que haya hecho algo mal (por ejemplo, hablar el nivel más bajo aquí, escribir mal la variable o llamar al método).
Creo que esto y el hecho de que otros lenguajes ofrecen características de "emprendedora" más simples por su naturaleza (es decir, servidores de aplicaciones para "usos bancarios") lo reduce a por qué muchos no ven PHP en grande (o mejor: enorme) proyectos.
Hay algo sobre la construcción del lenguaje PHP que no es lo suficientemente bueno para mí. Por ejemplo, el nombre de las funciones. No es una buena práctica usar varias formas de nombrar una función en un idioma. La mezcla entre guiones bajos (nombre_función), las palabras se mantienen juntas (nombre de función), etc. Quiero decir, esto es realmente un desastre. Hay demasiadas funciones que son muy similares o hacen las mismas cosas, pero sus nombres son muy confusos. Esto no es característico de un buen lenguaje de programación.
En implementaciones grandes, el lenguaje debe ser lo suficientemente fácil y específico para escribir. Algo que PHP omite como la declaración de tipos de variables, se vuelve muy difícil de entender y tratar más tarde.
Otro punto es la adición constante de características y la cancelación de alguna otra. Supone que la adición de OOP en PHP 5 hará las cosas más fáciles para los programadores, pero ¿qué pasa con las consideraciones de compatibilidad con versiones anteriores?
La razón principal por la cual este lenguaje de programación es como es, se debe a sus orígenes: Página de inicio personal. No fue diseñado para grandes despliegues.
Sé que hay grandes esfuerzos para hacer de este lenguaje un lenguaje de peso empresarial, y personalmente, estoy esperando un lenguaje de programación de servidor de código abierto lo suficientemente bueno; pero hasta que llegue el día, va a correr una gran cantidad de agua debajo del puente.
Mucha gente que dice no usarlo realmente está diciendo que no usen PHP 4. Todo se reduce a esto
puedes escribir un buen código en cualquier idioma
y
puedes escribir código incorrecto en cualquier idioma
PHP a menudo se presta a convertirse en bibliotecas de códigos de espagueti enredados y convierte su ''aplicación'' en una simple serie de scripts (vea Moodle para ver un buen ejemplo de esto ...)
Creo que mucho del ''No usar PHP para cosas grandes'' viene de PHP pirateado por su propósito original: un lenguaje de plantillas. Lo cual puedo entender, pero hay muchos proyectos que demuestran que puedes hacerlo (Drupal, mediawiki, Facebook).
Como la pregunta que ligé fue eliminada, pondré algo aquí:
Pregunta
Hice un comentario irónico en otro hilo de preguntas llamando a PHP un lenguaje terrible y se votó como loco. Aparentemente hay muchas personas aquí que aman PHP.
Entonces soy genuinamente curioso. ¿Qué me estoy perdiendo? ¿Qué hace que PHP sea un buen lenguaje?
Aquí están mis razones para desagradarlo:
PHP tiene nombres inconsistentes de funciones incorporadas y de biblioteca. Los patrones de nomenclatura predecibles son importantes en cualquier diseño.
PHP tiene un orden de parámetros incoherente para las funciones integradas, por ejemplo, array_map vs. array_filter, que es molesto en los casos simples y plantea todo tipo de comportamiento inesperado o algo peor.
Los desarrolladores de PHP desaprobaban constantemente las funciones incorporadas y la funcionalidad de bajo nivel. Un buen ejemplo es cuando dejaron de usar pass-by-reference para las funciones. Esto creó una pesadilla para cualquiera que realice, digamos, devolución de funciones.
Una falta de consideración en el rediseño. La depreciación anterior eliminó la capacidad, en muchos casos, de proporcionar valores de palabras clave predeterminadas para las funciones. Lo arreglaron en PHP 5, pero desaprobaron la referencia de paso a paso en PHP 4.
Mala ejecución de los espacios de nombre (anteriormente sin espacios de nombres). Ahora que existen espacios con nombre, ¿qué usamos como carácter de desreferencia? Backslash! ¡El personaje se usa universalmente para escapar, incluso en PHP!
La conversión de tipo implícita demasiado amplia genera errores. No tengo problemas con las conversiones implícitas de, por ejemplo, flotante a entero o viceversa. Pero PHP (la última vez que lo comprobé) intentará mágicamente convertir una matriz en un número entero.
Rendimiento de recursión pobre. La recursividad es una herramienta fundamentalmente importante para escribir en cualquier idioma; puede hacer que los algoritmos complejos sean mucho más simples. El apoyo deficiente es inexcusable.
Las funciones son insensibles a las mayúsculas y minúsculas. No tengo idea de lo que estaban pensando en este. Un lenguaje de programación es una forma de especificar el comportamiento para una computadora y un lector del código sin ambigüedad. La insensibilidad a mayúsculas / minúsculas introduce mucha ambigüedad.
PHP fomenta (prácticamente requiere) un acoplamiento del procesamiento con la presentación. Sí, puede escribir PHP que no lo hace, pero en realidad es más fácil escribir código incorrectamente (desde una perspectiva de diseño de sonido).
El rendimiento de PHP es abismal sin almacenamiento en caché. ¿Alguien vende un producto comercial de caché para PHP? Oh, mira, los diseñadores de PHP lo hacen.
Lo peor de todo es que PHP convence a las personas de que diseñar aplicaciones web es fácil. Y de hecho hace mucho del esfuerzo involucrado mucho más fácil. Pero el hecho es que diseñar una aplicación web que sea segura y eficiente es una tarea muy difícil.
Al convencer a tantos para que se ocupen de la programación, PHP ha enseñado a un subgrupo completo de malos hábitos y mal diseño de programadores. Les da acceso a capacidades que les faltan conocimientos para usar de forma segura. Esto ha llevado a la reputación de PHP como insegura.
(Sin embargo, admitiré fácilmente que PHP no es más o menos seguro que cualquier otro lenguaje de programación web).
¿Qué es lo que me estoy perdiendo sobre PHP? Estoy viendo un lío de un lenguaje orgánicamente desarrollado y mal administrado que está generando pobres programadores.
Entonces, ¡convencerme de lo contrario!
Respuesta mejor calificada
Haré una puñalada en responder a cada uno de tus puntos
PHP tiene nombres inconsistentes de funciones incorporadas y de biblioteca. Los patrones de nomenclatura predecibles son importantes en cualquier diseño.
Yo amo y odio este tema. Porque en esencia, este problema es correcto. ¿Por qué algunas funciones de dos palabras se dividen con un guión bajo y otras no? ¿Por qué los parámetros de aguja y pajar intercambian posiciones en la firma del argumento algunas veces? Es ridículo. Pero al final del día ... ¿esto realmente importa? Mi IDE con intellisense y php.net a solo un clic del navegador, esto simplemente no es tan importante. ¿Es negativo contra PHP como lenguaje? Sí. ¿Impide mi habilidad para ser un programador efectivo? No.
Los desarrolladores de PHP desaprobaban constantemente las funciones incorporadas y la funcionalidad de bajo nivel. Un buen ejemplo es cuando dejaron de usar pass-by-reference para las funciones. Esto creó una pesadilla para cualquiera que realice, digamos, devolución de funciones.
Personalmente, creo que este no es un buen punto. La depreciación es necesaria para la evolución de un idioma, especialmente uno que tiene tanto kruft como PHP. PHP tiene muchos problemas para "hacer que sea fácil ser un mal programador *", pero al mismo tiempo, el grupo de PHP también se mete en problemas cuando intentan eliminar las construcciones estúpidas del lenguaje, como el tiempo transcurrido de la llamada. -referencia. Eliminar el tiempo de referencia de la llamada pasada fue una de las mejores movidas que alguna vez hicieron. No había una manera más fácil para un desarrollador principiante de dispararse en el pie que con esta "característica".
Una falta de consideración en el rediseño. La depreciación anterior eliminó la capacidad, en muchos casos, de proporcionar valores de palabras clave predeterminadas para las funciones. Lo arreglaron en PHP 5, pero desaprobaron la referencia de paso a paso en PHP 4.
No creo que haya una falta general de consideración en absoluto, creo que solo te picó este cambio en particular y te dejaron un sabor amargo en la boca. Los cambios de idioma a menudo se conocen meses si no años antes de tiempo. Se proporcionó una guía de migración para el cambio de 4 a 5, y las diferencias de versión están documentadas en el manual. El tiempo de pasada de referencia fue una "característica" horrible y no le da al desarrollador ningún poder expresivo que no pueda obtener por otros medios. Me alegro de que se haya ido (junto con otras citas mágicas como mierda)
Mala ejecución de los espacios de nombre (anteriormente sin espacios de nombres). Ahora que existen espacios con nombre, ¿qué usamos como carácter de desreferencia? Backslash! ¡El personaje se usa universalmente para escapar, incluso en PHP!
Tengo sentimientos encontrados sobre esto. Parte de mí piensa "a quién le importa, el personaje que escapa no tiene sentido fuera de una cuerda de todos modos", y una parte de mí piensa "seguramente podrían usar algo mejor". Pero podrían ellos? No sé, no soy un desarrollador para el analizador Zend. ¿Es un gran descuido que hasta 5.3 PHP nunca tuvo espacios de nombres? Si, absolutamente.
La conversión de tipo implícita demasiado amplia genera errores. No tengo problemas con las conversiones implícitas de, por ejemplo, flotante a entero o viceversa. Pero PHP (la última vez que lo comprobé) intentará mágicamente convertir una matriz en un número entero.
Creo que está bien no estar de acuerdo con cómo PHP hace esto, pero no está de acuerdo con que haga que el lenguaje sea "malo". Pero pregúnteme cuánto me quiero sentar en este tema y discutir sobre tipeo débil versus fuerte. (PD: no, para nada ). Para el registro: PHP emitirá un error de nivel E_WARNING cuando el tipo de argumento importa y no puede resolverse mediante coerción.
Rendimiento de recursión pobre. La recursividad es una herramienta fundamentalmente importante para escribir en cualquier idioma; puede hacer que los algoritmos complejos sean mucho más simples. El apoyo deficiente es inexcusable.
PHP es un DSL para la web. Lo he estado haciendo a tiempo completo durante 8 años y quizás he usado recursiones 4 o 5 veces, generalmente para algún tipo de directorio molesto o cruce de XML. Simplemente no es un patrón necesario para el desarrollo web tan a menudo. No estoy excusando el bajo rendimiento, pero este es un tema académico mucho más que un problema de producción. Si necesita un rendimiento recursivo realmente potente, PHP ya es el idioma equivocado para usted.
Las funciones son insensibles a las mayúsculas y minúsculas. No tengo idea de lo que estaban pensando en este. Un lenguaje de programación es una forma de especificar el comportamiento para una computadora y un lector del código sin ambigüedad. La insensibilidad a mayúsculas / minúsculas introduce mucha ambigüedad.
Estoy 100% de acuerdo con esto.
PHP fomenta (prácticamente requiere) un acoplamiento del procesamiento con la presentación. Sí, puede escribir PHP que no lo hace, pero en realidad es más fácil escribir código incorrectamente (desde una perspectiva de diseño de sonido).
* Hmmm, este tema suena desesperadamente familiar ...
Pero en serio, me parece extraordinario que la gente se queje de un lenguaje que le permitirá 100% implementar cualquier sistema de salida que desee (el volumen y el estilo de los sistemas de plantillas de PHP solo hablan de esto) - O - omita todos esos gastos generales y acaba de salir directamente. Esto no hace que PHP sea malo en absoluto. Es parte de lo que hace que PHP sea bueno.
El rendimiento de PHP es abismal sin almacenamiento en caché. ¿Alguien vende un producto comercial de caché para PHP? Oh, mira, los diseñadores de PHP lo hacen.
¿Te refieres al caché de bytecode (como un acelerador) o al caché de salida?
Si el primero, entonces realmente no sé cuánto me importa este tema. Los aceleradores son gratuitos y fáciles de ejecutar. Podríamos discutir sobre por qué no es parte del lenguaje, pero al final, no creo que importe mucho.
Si está hablando de almacenamiento en caché de resultados, entonces no sé qué decirle. CUALQUIER proyecto web con un tráfico significativo necesita el almacenamiento en caché (podcast de semilla # 27, por ejemplo). Esto no es un problema específico de PHP en absoluto .
En resumen, creo que considera PHP un lenguaje "malo" de una manera muy académica. Y en su publicación anterior, usted probablemente fue rechazado por personas como yo que usan PHP para "hacer las cosas".
Segunda respuesta mejor calificada
Todas tus críticas (y algunas más) son válidas. Se te permite e incluso se espera que odies PHP.
Pero, nuevamente, tiene algunos beneficios:
- Ubicuo
- Rápido (especialmente usando cachés de código de operación)
- Enorme comunidad (y gran documentación)
- Trabajos
Finalmente, puede superar muchas, si no todas las desventajas, escribiendo un buen código que escribiría en cualquier otro idioma. Puede escribir código sólido, seguro y de buen olfato en PHP, que muchas veces se ejecutará más rápido y será más fácil de alojar y escalar que muchas alternativas.
Tercera respuesta mejor calificada
¿Qué es lo que me estoy perdiendo sobre PHP? Estoy viendo un lío de un lenguaje orgánicamente desarrollado y mal administrado que está generando pobres programadores.
Sencillo. El hecho de que los programadores pobres se ponen muy a la defensiva sobre su idioma. ;) PHP es fácil de aprender, mucho más fácil que las alternativas, y una vez que lo has aprendido, no es exactamente obvio 1) qué le pasa a PHP, 2) cómo las alternativas son mejores, y 3) cómo cambiar a, y aprender, una de las alternativas.
Y tal vez el hecho de que, bueno, ¿qué alternativas tienen las personas? ¿ÁSPID? Eso tiene muchos problemas por sí mismo, desde la imposibilidad de ejecutar en la mayoría de los servidores web (Apache), hasta algunas opciones de diseño ridículas y sobredimensionadas por sí mismo (formularios web? Viewstate? AJAX donde sus solicitudes "asincrónicas" son interceptadas y ejecutadas secuencialmente ? Ruby on Rails Bueno, tal vez, excepto cuántos servidores web lo soportan de nuevo? No es exactamente accesible en este momento. Y es lento. Entonces, tal vez la "fortaleza" de PHP es que realmente no existe una buena alternativa. Al menos es por eso que manténgase alejado de toda la programación web cuando sea posible. PHP apesta, y tampoco estoy interesado en ninguna de las alternativas.
PHP tiene tantos problemas fundamentales que ni siquiera es gracioso. Desde la falta de soporte Unicode, a las muchas conversiones de tipo implícitas que a menudo conducen a agujeros de seguridad inesperados, a la mezcla completa de presentación y ... todo lo demás, o al módulo de base de datos predeterminado que no usa (último controlé) consultas parametrizadas. Estamos hablando de un lenguaje hecho para dos cosas, acceso a bases de datos y generación de HTML, y que es terrible en ambos.
Es simplemente un desastre desagradable, un lenguaje diseñado por personas que no están capacitadas o no pueden diseñar un idioma. ;)
Mira esta pregunta similar: ¿PHP puede manejar sitios de nivel empresarial, así como Java?
Recapping: Facebook, Wikipedia, Yahoo.com, Digg, Flickr y muchos otros sitios gigantes se ejecutan en PHP. Si alguna vez está cerca de hacer algo de ese calibre, puede estar seguro de que puede llegar allí con PHP.
El grado de mantenimiento, extensión, confiabilidad, seguridad y rendimiento de sus aplicaciones depende exclusivamente de usted y es independiente del idioma. A favor de PHP, sin embargo, tiene herramientas muy convenientes para construir aplicaciones web.
Realmente lo odio cuando la gente dice rotundamente que PHP es un lenguaje terrible porque puedes escribir código que mezcla la presentación con la lógica, o que te permite la inyección de SQL. Eso no tiene nada que ver con el lenguaje, ese es el desarrollador.
PHP ha demostrado ser altamente escalable: Wikipedia es uno de los sitios más grandes y populares en Internet y ejecuta PHP. ¿Basta de charla?
Hay muchas herramientas / bibliotecas que le brindan un marco para trabajar, lo que hace menos probable que alguien escriba un código pobre y menos fácil de mantener: vea CakePHP, Symfony, PDO, Smarty, etc. etc.
Ha recibido una mala reputación porque es un lenguaje que tiene muy pocas barreras de entrada: es gratis, puedes obtener alojamiento PHP muy barato, la documentación es la mejor que hay , hay muchos tutoriales en línea, además de que hace un montón de cosas muy fácil (por ejemplo: abrir una URL y obtener el contenido del archivo: file(''http://www.google.com'');
). Esto significa que muchos novatos lo recogieron y crearon muchos sitios muy dudosos con él, pero eso sucederá con el idioma que elijas como el primero.
Trabaja con un marco de ORM sólido (hay aproximadamente 30 preguntas en SO sobre cuál es la mejor), y te tratará bien.