2010-04-04 3 views
10

Qualcuno ha detto che quando il codice PHP e l'applicazione usano variabili globali, allora deve essere un codice spaghetti (presumo questo). Uso molto WordPress. Per quanto ne so, è la cosa migliore vicino al grande software PHP. E usa molte variabili globali per interagire tra i suoi componenti.Quali sono le caratteristiche del codice spaghetti?

Ma dimentichiamoci, perché francamente, questa è l'unica cosa che so. Quindi è completamente parziale: D

Quindi, sono solo curioso, qual è la caratteristica del codice spaghetti?

PS: l'unica cosa che so è WordPress. Quindi, si spera, forse questo aiuterà qualcuno a dare un'ottima risposta a qualcuno che ha poca esperienza nello sviluppo di un'applicazione web completa su PHP (ad esempio, il sito Web Stack Overflow).

+1

cosa intendi in 'variabile globale'? –

+0

intendevo in questo commento in http://stackoverflow.com/questions/2571474/isset-and-php-global-variable – justjoe

+16

Wordpress è uno dei ** peggiori ** esempi di programmazione PHP nel mainstream e il principale la ragione è che si basano molto pesantemente sulle variabili globali. Hanno una terribile reputazione per la sicurezza a causa di esso. Pubblicheremo esempi del perché è male, ma ho già scritto una lunga lamentela su questo (http://www.phpvs.net/2009/12/08/an-exercise-in-wordpress-integration-or-why- wordpress-succhia /). Se vuoi avere esperienza nella creazione di applicazioni web PHP, ti suggerisco di esaminare alcuni framework PHP, come Zend, Symfony o CodeIgniter. – zombat

risposta

17
  • No modularità (tutto in un unico file, di classe, di modulo, namespace, pacchetto, o qualunque sia la vostra lingua utilizza per fornire modularità),
  • Un sacco di goto 's,
  • cattiva organizzazione,
  • Nessuna chiara separazione tra funzionalità e scopo. (Ovvero, classi o funzioni omnicomprensive)
  • Funzioni lunghe.
  • Denominazione scadente.
  • Nessuno stile di codifica coerente in tutto.
  • Nessun contratto di interfaccia chiaro tra implementazione e client di codice. (Ovvero, nessuna specifica di cosa sono gli input, le uscite, le condizioni pre e post-condizioni delle funzioni)
  • Eccessivo affidamento su strutture di dati interne con una piccola astrazione.
  • Le funzioni consentono/modificano casualmente lo stato globale senza menzionarlo nella documentazione.
  • Mancanza di commenti o documentazione di codice non banale.
  • Codice che è più complicato di quanto deve essere.
  • Mancanza di riutilizzo. (un sacco di codice duplicato, a.k.a. copypasta)
  • Nessuna verifica o test di unità (funziona sulla fede).
  • Numeri magici.

In sostanza, la mancanza di progettazione e accortezza, e solo un miscuglio di hack schiaffeggiato insieme. Questo vale per qualsiasi lingua, non solo per PHP.

per qualcuno che ha poca esperienza nello sviluppo di un'applicazione web completa su PHP (ad esempio, il sito Web Stack Overflow)

Cordiali saluti, ma Stack Overflow non è stato sviluppato con PHP.

+0

@alex: cosa? presumo che ogni web in questo mondo si sviluppi utilizzando PHP; D – justjoe

+2

Indovina che abbiamo trovato quello che non funziona! –

7

Bene, parlando di commenti che hai postato, la spiegazione è molto semplice. L'utilizzo dell'operatore global rende sconosciuta l'origine di una variabile, come l'altra estremità di spaghetti spaghetti. Può essere definito ovunque. Quindi, quando chiami la funzione, non hai idea del valore di questa variabile.Invece di esso, il passaggio diretto di una variabile lo rende chiaro e chiaro:

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

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

+2

Beh .. non è solo che la fonte è sconosciuta, ma non è propriamente incapsulata. Se inizi a buttare tutto nello spazio globale, inizi a ottenere scontri sul nome e altri problemi ... – mpen

5

Il codice degli spaghetti ha caratteristiche specifiche che lo distinguono dal semplice codice povero. Gli spaghetti sono estremamente complicati e non strutturati, quindi è difficile seguire il flusso di un processo attraverso il programma. È come cercare di districare i noodles in una ciotola di bolognese.

Questo è il motivo per cui le dichiarazioni GOTO (parola di terrore!) Vengono spesso citate in questo contesto: un'istruzione GOTO trasferisce il controllo in un'altra posizione definita arbitrariamente nel codice di base. La maggior parte dei linguaggi di programmazione ha comandi che possono essere abusati per simulare il comportamento dello stile goto; ad esempio, utilizzando le eccezioni per implementare la normale logica di business piuttosto che gestire gli errori.

Le variabili globali contribuiscono al codice spaghetti poiché i valori vengono assegnati al di fuori dell'ambito dell'unità di programma corrente. Ciò può rendere difficile determinare dove nel codice di base una variabile è impostata su un determinato valore (o addirittura se è impostata su qualsiasi valore).

Per inciso, l'uso delle istruzioni goto non significa che un programma sia spaghetti. È perfettamente possibile scrivere codice chiaro e ben strutturato utilizzando goto, è solo necessario un sacco di autodisciplina per non abusare della sua flessibilità. I moderni linguaggi di programmazione hanno reso il suo uso non necessario e indesiderabile.

1

WordPress è il più grande codice PHP di spaghetti che ho visto in giro. C'è un mix scioccante di PHP, HTML, JavaScript e tutte le cose tra tutti raggruppati negli stessi file. Se vuoi un altro esempio di codice spaghetti, consulta osCommerce o Zen Cart.

In effetti oserei dire che una grande maggioranza di applicazioni PHP open source sono esempi piuttosto scioccanti di come programmare in PHP. Se si desidera esaminare un buon esempio strutturato (ovvero non spaghetti), esaminare la struttura Yii o Zend Framework. Framework come CodeIgniter e Kohana, anche se non spaghetti, non sono ottimi esempi di come strutturare le cose in PHP 5 poiché usano molte delle funzionalità utilizzate in PHP 4 semplicemente perché non c'era modo migliore di farle fino a PHP 5 (per esempio , utilizzando l'ereditarietà basata sul percorso anziché l'ereditarietà vera dell'oggetto).

Se si desidera un esempio ragionevole di programmazione procedurale, fare riferimento a Drupal. Potrebbe non essere l'applicazione PHP con le migliori prestazioni, a causa della complessità, ma sicuramente batte WordPress e puoi fare molte delle stesse cose con esso.

+0

Ma Kohana è stato progettato per PHP5 e dal primo giorno lo ha richiesto, il che contrasta ciò che dici a riguardo non essendo strutturato per PHP5. Per quanto riguarda WordPress, anche se non MVC, che credo sia una delusione, sì, è una cosa notevole perché stranamente è facile personalizzabile e rethemed. È uno dei motivi per cui ha più successi di Alexa di Drupal, oserei dire. Senza dubbio, Drupal è più difficile da riadattare e personalizzare rispetto a WordPress, se sei nuovo a queste cose. Ho fatto entrambe le cose, e ho iniziato con Drupal. – Volomike

+0

-1 per le informazioni errate su Kohana. Questo framework è uno dei migliori esempi di PHP in termini di struttura, stile di codifica, ecc. Sebbene inizialmente fosse basato su Code Igniter, ora è completamente diverso da esso. –