¿Qué es la "forma PHP"?

8

Veo referencias constantes al "Camino", como las descripciones de un marco o aplicación particular como "Pythonic", cierta persona como "pirata informático de Perl" o "verdadero código Ruby", pero ¿dónde están los "piratas informáticos de PHP"? las aplicaciones "PHP-ic", el "verdadero estilo PHP"?

Esto me hizo pensar: ¿PHP tiene incluso un estilo definido? Decir que PHP es fácilmente "cambiable" a otros estilos no cuenta, como ocurre con cualquier lenguaje razonable.

Cualquier aportación muy apreciada.

Jonathan Chan
fuente
3
"Si aún funciona, no está terminado"
sevenseacat
quora.com/How-does-a-programmer-become-a-brogrammer - ¿quizás podríamos llamarlo "PHmoronic"?
psr

Respuestas:

13

A diferencia de muchos otros lenguajes de programación, PHP no tiene un pensamiento unificador o un conjunto de ideas centrales: comenzó como un conjunto muy pragmático de scripts perl, y se agregaron características según sea necesario, sin un proceso de diseño formal. El resultado es un lenguaje bastante útil y completo, pero no muy consistente por sí mismo. La inmensa popularidad del idioma empeora las cosas; Tan pronto como se introduce una nueva característica, prácticamente se establece en piedra, porque todos comienzan a usarla. Por lo tanto, se han consolidado algunos errores de diseño, y al equipo de PHP le resulta muy difícil lograr que las personas se alejen de ellos, register_globalsy magic_quotesson solo dos ejemplos de cosas que parecían buenas ideas en ese momento pero que resultaron desenfrenadas.

Otro factor es la cultura que creció alrededor de PHP. Cuando su popularidad comenzó a crecer, el caso de uso típico para PHP fue agregar pequeños fragmentos de funcionalidad del lado del servidor en documentos HTML estáticos. Una gran parte del público objetivo eran aficionados y no programadores que usaban PHP para agregar un poco de cosas dinámicas a sus sitios web estáticos. La cultura resultante es muy pragmática, sin mucho interés en establecer un "camino apropiado"; Si bien es posible escribir PHP bastante elegante, una gran parte de la comunidad de usuarios simplemente no tiene mucho interés en él, siempre y cuando funcione.

Por el contrario, lenguajes como python, ruby, Lisp, C #, Haskell y otros han tenido una filosofía desde el principio, y la comunidad generalmente la adopta y empuja el lenguaje a la altura. (En caso de que esté interesado, escriba import thisuna sesión interactiva de Python). Tener una filosofía significa que hay una guía para usar y extender el idioma, y ​​también conduce a una comunidad más homogénea: si no está de acuerdo con la filosofía, es más probable que simplemente se vaya y encuentre una que se adapte mejor a usted ; Es más probable que la comunidad resultante llegue a un consenso sobre todo tipo de cosas.

Dicho esto, PHP tiene fortalezas y debilidades, así como oscuros casos extremos; escribir código PHP idiomático significa usar las fortalezas y evitar las debilidades y las obscuridades, al igual que con cualquier otro lenguaje.

tdammers
fuente
¿De qué manera el php no es consistente? La simple simplicidad del lenguaje conduce a un lenguaje extremadamente ortogonal que nunca tendrá que adivinar qué sintaxis usar. En particular, las estructuras de datos complejas (árboles, listas enlazadas, gráficos de borde) se manejan casi tan bien como en Python y ciertamente mejor que en Java o C ++ STL.
James Anderson
3
PHP pone todo en el espacio de nombres global; las diversas funciones de API utilizan diferentes convenciones de nomenclatura, algunas de ellas modifican sus argumentos en el lugar mientras que otras en una situación similar devuelven el argumento modificado, solo la mitad de sus funciones de cadena están disponibles como versiones mb_XXX (), hay tres tipos de variables con diferentes reglas de alcance, usted llama a una función para definir una constante, puede (pero no tiene que) llamar a una función para crear o leer una variable global, podría continuar por años.
tdammers
@tdammers PHP no coloca "todo" en el espacio global, mientras que muchas funciones están en el espacio de nombres global, muchas otras no lo están; vea, por ejemplo, PDO o SPL. Las variables globales, locales y estáticas existen en muchos idiomas y de ninguna manera son exclusivas de PHP. Puede definir constantes sin llamar a una función. Puede escribir una función que acceda a globales (es el punto de tener globales) pero no hay absolutamente nada de malo en eso.
StasM
Creo que por la simple razón de que esta respuesta realmente respalda sus afirmaciones, debería seleccionarse como Mejor respuesta, pero las otras respuestas también fueron muy útiles (¡y me ayudaron a darme cuenta de cuánto argumento puede traer una pregunta como esta!)
Jonathan Chan
15

Creo que cuando la gente dice PHP-way, tiene un peso negativo, ese es el término que usamos en una tienda polygot (Python, C #, Ruby). Como "simplemente hazlo y tíralo", ya que podría tener goto's, fugas de identificadores de archivos, vulnerabilidades de inyección SQL, bucles anidados súper profundos, funciones de 3000 líneas y aún ser clasificado como el ' PHP-way '. Si en una revisión por pares alguien me dijera que el código es muy 'PHP-way', estaría profundamente ofendido.

Aprecio que esto provocará algunas llamas, por lo que reconoceré que ha habido personas conocidas por producir un buen código PHP, y PHP se usa en algunos de los principales sitios de producción. Solo digo lo que la multitud piensa y ve con mayor frecuencia, la opinión es transmitida por los actos de la mayoría, no de la minoría.

sa93
fuente
55
Lo curioso es que todo lo que mencionó no tiene absolutamente nada que ver con PHP, y hasta hace poco ni siquiera tenía goto, por lo que no hay posibilidad de que haya tanto código PHP con goto's que le haya dado el nombre a un estilo distinto.
StasM
StasM one puede crear un monstruo inmaterial, inseguro o de bajo rendimiento (o una mezcla de todos) en cualquier idioma. El VM / intérprete hoy en día rara vez es el problema. Lo que estoy diciendo es que la baja barrera de entrada de PHP, la contaminación del espacio de nombres global y otras características / desventajas de los lenguajes parecen atraer a una multitud de personas de todos modos y de ahí la reputación. Es una reputación innegable, solo estaba tratando de arrojar algo de luz sobre eso
sa93
StasM, perdiste el punto, nunca dije que incluiría gotos.
sa93
3
@ sa93: soy un gran fanático de php y lo he estado usando desde php3. StasM es bastante correcto: la mayoría de la gente piensa que la salida de PHP es pobre. Esto es por una buena razón, la mayor parte lo es. Solo necesito vivir con eso, en el lado positivo, hace que sea bastante fácil brillar en la contratación de php.
Jonno
Vi mucho código J2EE que es mucho peor que cualquier código php que haya visto.
James Anderson el
4

Si hay una "forma php" es "¡Solo hazlo!".

Aunque php tiene todas las clases de construcciones OO modernas, espacios de nombres de módulos, introspección, etc., además de todas las características de programación dinámica generalmente asociadas con lenguajes más fascinantes como Python. Rara vez los ves utilizados solo por el hecho de hacerlo, o ves que los programadores de php se obsesionan con la "pureza" de su implementación.

No tengo idea de por qué debería haber tanta diferencia cultural, pero ahí está.

Hay una serie de horrores por ahí y esto quizás refleja que tanto código "php" es "My First Webapp" o incluso "My First Program".

Personalmente, me resulta bastante fácil leer / comprender el código php escrito profesionalmente, generalmente es mucho más fácil de leer que las aplicaciones Java con todas sus clases Factory y la mitad de la lógica en los archivos XML.

James Anderson
fuente
4

Yo diría que la forma PHP es el "Programador de cinta adhesiva": envíelo rápido, envíelo rápido, preocúpese por todo lo demás más tarde y repare los errores rápidamente sin pensar en el futuro. Si bien eso no es de ninguna manera una condena del PHP en sí (puede hacerlo en cualquier idioma), solo recientemente los desarrolladores de PHP han comenzado a preguntarse acerca de la ingeniería de software y los patrones de diseño, SOLID, pruebas y similares.

Wayne Molina
fuente
2

Yo diría que la idea de PHP es práctica. Es difícil definir qué significa en cada caso por separado, pero, por ejemplo, si hacer algo requiere un formulario HTML y cinco líneas de código, no coloque el marco MVC con 20 clases allí. Y, por el contrario, si desarrolla una aplicación para 20 millones de personas, coloque el marco allí y tenga la lógica, la presentación y el control de flujo por separado. Pero no hay nada especial sobre PHP aquí, así que supongo que puede no ser una respuesta satisfactoria.

No creo que haya un estilo PHP. Personalmente, creo que la noción de que hay un estilo que se adapta a todos los usuarios del lenguaje tiene sentido solo si el lenguaje tiene un campo de uso muy restringido, lo que definitivamente no es cierto para PHP.

Las aplicaciones específicas tienen sus estilos; por ejemplo, si observa Zend Framework, verá un código muy OO con interfaces definidas, API controladas, etc., donde podrá reconocer fácilmente los patrones de diseño familiares. Por otro lado, hay aplicaciones que adoptan un enfoque más procesal, como Drupal.

Entiendo que eso no le da mucho "verdadero estilo PHP", pero eso es probablemente porque no existe tal cosa. Hay mejores prácticas, etc., pero no es lo que estás buscando, me temo.

StasM
fuente
1

Algunas personas usan php como una señal de desdén, solo un hecho, personalmente soy un fanático.

Sin embargo, para mí, lo que definió un enfoque de php es esencialmente la falta de contexto de aplicación. No hay un contexto de aplicación integrado en comparación con .NET o el mundo Java.

Esto lleva a que los servidores php sean esencialmente sin estado (siempre que las sesiones se trasladen a otro servidor, por ejemplo, disco compartido o db)

Esto es más o menos lo que pienso cuando pienso en la forma php.

Jonno
fuente
1

Otra respuesta! Esta vez es más una observación sobre la "cultura" de la programación.

PHP está en la misma posición que Javascript (¡ECMAscript para pedantes!) En 2002. Un pequeño grupo de programadores expertos apreciaba su excelencia, aunque la opinión general era que era un lenguaje de script pobre y oscuro útil solo para desplazar pancartas y usuarios molestos. con ventanas emergentes.

Luego llegó AJAX y de repente todo el mundo quedó asombrado por el poder y la elegancia de Javascript.

Aunque en realidad no es tan elegante como Javascript, php comparte gran parte del poder y la simplicidad de ese lenguaje, y existe un consenso generalizado sobre la forma "correcta" de programar php para sistemas grandes.

El otro indicador de cuán bueno es php en su esfera especializada es la falta de marcos para las aplicaciones más serias, muchos programadores muy experimentados están felices de usar "php" tal como está sin la ayuda de algún mega marco. La gran proliferación de frameworks y otras ayudas me indica que Java, Python, etc. no lo hicieron bien y que los programadores que usan estos lenguajes están profundamente descontentos e inseguros acerca de cómo se debe crear una aplicación web. Sin embargo, cuando ven cómo se usa el código php simple y puro para implementar con éxito sitios web complejos sin las configuraciones XML ilegibles, el dialecto de plantilla del mes o el rollo de su propio dialecto ORM, sacan la conclusión incorrecta: que el php debe ser malo porque no tiene clases IntegerFactory, inyección de dependencia, etc.

De hecho, todas estas cosas se implementan fácilmente en php y a menudo se usan si es necesario; es solo que la implementación generalmente es un par de líneas de php y no es reconocida como tal por los programadores que están acostumbrados a hacer lo mismo con bibliotecas y API complejas.

PHP es simple. "simple" es el complemento más alto que le puede dar a una pieza de software y el más difícil de lograr.

James Anderson
fuente