2010-04-04 35 views
10

Alguien dijo que cuando su código PHP y su aplicación usan variables globales, entonces debe ser un código de spaghetti (supongo que esto). Uso WordPress mucho. Por lo que sé, es lo mejor cerca de un excelente software PHP. Y usa muchas variables globales para interactuar entre sus componentes.¿Cuáles son las características del código de spaghetti?

Pero olvídate de eso, porque francamente, eso es lo único que sé. Por lo tanto, está completamente sesgado; D

Entonces, solo tengo curiosidad, ¿cuál es la característica del código de spaghetti?

PD: lo único que sé es WordPress. Así que, con suerte, tal vez esto ayude a que alguien dé una respuesta excelente para alguien que tiene poca experiencia en el desarrollo de una aplicación web completa en PHP (por ejemplo, el sitio web de Stack Overflow).

+1

¿qué quieres decir con 'variable global'? –

+0

quise decir en este comentario en http://stackoverflow.com/questions/2571474/isset-and-php-global-variable – justjoe

+16

Wordpress es uno de los ** peores ** ejemplos de programación PHP en la corriente principal, y el principal la razón es que dependen extremadamente de las variables globales. Tienen una terrible reputación de seguridad por eso. Publicaba ejemplos de por qué es malo, pero ya escribí una larga diatriba al respecto (http://www.phpvs.net/2009/12/08/an-exercise-in-wordpress-integration-or-why- wordpress-sucks /). Si desea obtener experiencia en la creación de aplicaciones web PHP, le sugiero que investigue algunos de los frameworks de PHP que existen, como Zend, Symfony o CodeIgniter. – zombat

Respuesta

17
  • Sin modularidad (todo en un solo archivo, clase, módulo, espacio de nombres, paquete, o lo que su idioma utiliza para proporcionar modularidad),
  • Un montón de goto 's,
  • mala organización,
  • Sin separación clara de funcionalidad y propósito. (Es decir, clases o funciones que lo abarcan todo)
  • Funciones largas.
  • Mal nombre.
  • Sin estilo de codificación consistente en todo.
  • Ningún contrato de interfaz claro entre la implementación y los clientes del código. (Es decir, no se especifican las entradas, salidas, condiciones previas y posteriores de las funciones)
  • Confianza excesiva en las partes internas de las estructuras de datos con poca abstracción.
  • Las funciones permutan aleatoriamente/modifican el estado global sin mencionarlo en la documentación.
  • Falta de comentarios o documentación de código no trivial.
  • Código que es más complicado de lo que necesita ser.
  • La falta de reutilización. (un montón de código duplicado, a.k.a. copypasta)
  • Sin verificación o pruebas unitarias (funciona en la fe).
  • Números mágicos.

En esencia, la falta de diseño y previsión, y sólo un revoltijo de hacks juntaron. Esto se aplica a cualquier idioma, no solo a PHP.

para alguien que tiene poca experiencia en el desarrollo de una aplicación web completa en PHP (por ejemplo, la página web de desbordamiento de pila)

Para su información, pero desbordamiento de pila no fue desarrollada con PHP.

+0

@alex: ¿qué? Asumo que cada web en este mundo se desarrolla usando PHP; D – justjoe

+2

¡Creo que encontramos la que no! –

7

Bueno, hablando de comentarios que publicó, la explicación es muy simple. Usando el operador global se desconoce el origen de una variable, como el otro extremo de los fideos de espagueti. Se puede definir en todas partes. Entonces, cuando llama a su función, no tiene idea de qué valor tiene esta variable.En lugar de ello, el envío directo de una variable lo hace claro:

function hello_testing($conditional_random) { 
    if ($conditional_random)) { 
     echo "foo is inside"; 
    } 
} 

P.S. http://en.wikipedia.org/wiki/Spaghetti_code

+2

Bueno ... no es solo que su fuente es desconocida, pero no está encapsulada correctamente. Si comienzas a tirar todo al espacio global, comienzas a tener conflictos de nombres y otros problemas ... – mpen

5

El código de espagueti tiene características específicas que lo distinguen del código normal pobre. El espagueti es extremadamente complicado y desestructurado, por lo que es difícil seguir el flujo de un proceso a través del programa. Es como tratar de desenredar los fideos en un tazón de boloñesa.

Esta es la razón por la cual las declaraciones GOTO (pavorosa palabra) a menudo se citan en este contexto: una declaración GOTO transfiere el control a otra ubicación arbitrariamente definida en la base de código. La mayoría de los lenguajes de programación tienen comandos que se pueden abusar para simular el comportamiento de estilo goto; por ejemplo, el uso de excepciones para implementar la lógica comercial habitual en lugar de manejar errores.

Las variables globales contribuyen al código de spaghetti porque los valores se asignan fuera del alcance de la unidad de programa actual. Esto puede dificultar determinar en qué parte de la base de código se establece una variable a un valor determinado (o, en realidad, si se establece en algún valor).

Por cierto, el uso de las declaraciones goto no significa que un programa sea espagueti. Es perfectamente posible escribir código claro y bien estructurado usando goto, solo se requiere mucha autodisciplina para no abusar de su flexibilidad. Los lenguajes de programación modernos han hecho que su uso sea innecesario e indeseable.

1

WordPress es la mayor parte del código de espagueti PHP que he visto. Existe una impactante combinación de PHP, HTML, JavaScript y todo lo que se encuentra entre todos los agrupados en los mismos archivos. Si desea otro ejemplo de código de spaghetti, mire osCommerce o Zen Cart.

De hecho, me atrevo a decir que la gran mayoría de las aplicaciones PHP de código abierto son ejemplos bastante impactantes de cómo programar en PHP. Si desea ver un buen ejemplo estructurado (es decir, no espagueti), consulte Yii framework o Zend Framework. Frameworks como CodeIgniter y Kohana, aunque no son espaguetis, no son muy buenos ejemplos de cómo estructurar cosas en PHP 5 ya que usan muchas de las características utilizadas en PHP 4 simplemente porque no había una mejor manera de hacerlo hasta PHP 5 (por ejemplo , usando herencia basada en rutas en lugar de herencia de objetos verdaderos).

Si desea un ejemplo razonablemente bueno de la programación de procedimientos, haga clic derecho en Drupal. Puede que no sea la aplicación PHP con el mejor rendimiento, debido a la complejidad, pero es seguro que supera a WordPress y puede hacer muchas de las mismas cosas con ella.

+0

Pero Kohana fue diseñado para PHP5 y desde el primer día lo ha requerido, lo que contrarresta lo que dices sobre que no está estructurado para PHP5. En cuanto a WordPress, aunque no es MVC, lo que supongo que es una decepción, sí, es algo extraordinario porque, curiosamente, es fácil de personalizar y rethemed. Es uno de los factores por los que tiene más éxitos de Alexa que Drupal, me atrevería a decir. Sin duda, Drupal es más difícil de volver a personalizar y personalizar que WordPress, si eres nuevo en estas cosas. He hecho ambas cosas, y comencé con Drupal. – Volomike

+0

-1 para la información incorrecta sobre Kohana. Este marco es uno de los mejores ejemplos de PHP en términos de estructura, estilo de codificación, etc. Aunque inicialmente estaba basado en Code Igniter, ahora es completamente diferente. –

Cuestiones relacionadas