2009-12-28 10 views
7

Sto creando un file PHP che esegue 2 chiamate al database mysql e il resto dello script è se le istruzioni per cose come file_exist e altre variabili semplici. Ho finora circa 2000 righe di codice in questo file.Quante linee di codice PHP sono troppe per un file?

È consigliabile includere un file separato se un'istruzione è vera; o semplicemente digitare il codice direttamente nella dichiarazione if stessa?

È il loro numero massimo di righe di codice per un singolo file che deve essere rispettato con PHP?

risposta

6

Direi che non ci dovrebbero essere problemi di prestazioni legati al numero di linee nei file php, può essere grande quanto necessario.

Ora, per gli schemi e le best practice, direi che devi giudicare da solo, ho visto molti file ben organizzati di diverse migliaia di righe e un sacco di file effettivamente piccoli e difficili da leggere. Il mio consiglio sarebbe:

  • Giudicare la leggibilità del codice sorgente, organizzarlo sempre bene.
  • È importante avere una separazione logica in una certa misura, se il file esegue entrambi: accesso al database pesante, scrittura, modifica, rendering html, ajax e così via. È possibile separare le cose o utilizzare un approccio orientato agli oggetti.
  • Cerca sempre il saldo tra separazione logica e codice. Non dovrebbe essere complicato, né particolarmente accurato con molti file di 10 righe
+3

I file PHP vengono elaborati nel loro complesso. I file di grandi dimensioni, anche se contengono codice non richiamato, avranno un impatto significativo sulle prestazioni. Tuttavia, 2000 linee non hanno lo stesso ordine di grandezza di "grandi". –

+1

Tuttavia, una cache di opcode come APC può risolvere questo problema. –

1

Hai bisogno di concentrarti sul numero di linee? No, non necessariamente. Assicurati che il tuo codice sia organizzato, efficiente e non inutilmente dettagliato.

2

2000 linee di codice in un singolo file non sono esattamente male dal punto di vista del computer ma nella maggior parte delle situazioni è probabilmente evitabile, date un'occhiata allo MVC design pattern, vi aiuterà a organizzare meglio il vostro codice.

Inoltre, tenere a mente che inclusi (molti) file rallenteranno l'esecuzione del codice.

+1

Una cache di bytecode come APC si occuperebbe dell'ultimo problema. –

0

Non importa, purché il codice sia stato documentato correttamente, modularizzato il più possibile e verificato eventuali inefficienze. Potresti avere un file di 10.000 righe. Anche se di solito mi divido a circa 500-1000 per ogni sezione di un'applicazione.

0

Si consiglia di leggere un libro come Clean Code by Bob Martin. Qui ci sono alcune pepite da quel libro:

  • Una classe dovrebbe avere uno responsabilità
  • Una funzione dovrebbe fare una cosa e fanno bene

Con PHP, se non si utilizza il Approccio di classe; hai intenzione di imbatterti in problemi di duplicazione. Fatti un favore e fai qualche lettura sull'argomento; ti farà risparmiare molto più tempo in termini di estensione e manutenzione.

2

Il conteggio delle righe non è un buon indicatore delle prestazioni. Assicurati che il tuo codice sia organizzato in modo efficiente, diviso in classi o blocchi logici e che non unisca codice non correlato in singoli moduli.

Uno dei problemi con un linguaggio come PHP è che, a parte il caching della creatività, ogni riga di ogni file incluso deve essere tokenizzata, compresso tramite un albero di analisi e trasformata in istruzioni significative ogni volta che viene richiesta la pagina di hosting. Piattaforme compilate come .NET e Java non soffrono di questo killer delle prestazioni.

Inoltre, poiché uno degli altri poster menzionava MVC come un modo per mantenere i file brevi: una buona organizzazione del codice è una funzione dell'esperienza e del buon senso e non è in alcun modo legata a nessun particolare modello o architettura. MVC è interessante, ma non è una soluzione a questo problema.

+0

Una cache di opcode come APC, senza necessità di essere particolarmente creativa, si occuperà del problema di compilazione. – ceejayoz

+0

Vero, ma per quanto ne so, APC continua a non eseguire i numerosi passaggi di ottimizzazione di cui sono capaci i compilatori nativi. Non esattamente mele alle mele. –

+0

Inoltre,.Benchmark tra NET e PHP (con e senza APC): http://www.brandonsavage.net/of-lies-damned-lies-and-benchmarks-redux/ –

1

Le linee a 2k suonano troppo per me ... Anche se dipende dallo stile di codice che si sta seguendo, ad es. molte interruzioni di riga, molte piccole funzioni o buoni commenti api-contratto possono aumentare le dimensioni anche se sono buone pratiche. Inoltre, una buona formattazione del codice può aumentare le linee.

Per quanto riguarda il PHP, sarebbe bene sapere: 2 righe con una sola classe o solo una grande inclusione con codice PHP non OOP? È mescolato con le dichiarazioni del modello e la logica del programma (come trovo spesso nel codice PHP)?

Di solito non conteggio queste righe, quando dividere. Sono appena entrati in abitudini. Se il codice diventa confuso, reagisco e refactoring. Ancora aver guardato in qualche codice che abbiamo in squadra ha scritto recentemente, posso vedere alcuni modelli:

  • estratto di funzione/metodo se la dimensione è più grande di 20LOC (senza commenti) e l'uso di if/else clausole
  • estratto ad un'altra classe se la dimensione> 200-300LOC
  • estratto da un altro pacchetto/cartella se artefatti> 10

Ancora dipende da quello che il tipo di codice che ho. Ad esempio se sono coinvolti carichi di logica (se/else/switch/for), diminuisce la LOC per funzione. Se non vi è alcuna logica in gioco (semplici dichiarazioni stupide su un percorso) i limiti aumentano. Alla fine la regola più importante è: un umano dovrebbe capire il codice. Sarà in grado di leggerlo bene.

0

Non conosco alcun modo utile per suddividere il codice che sia così semplice, soprattutto se tutto appartiene insieme semanticamente.

Probabilmente è più interessante pensare se è possibile eliminare parte del codice tramite il refactoring. Ad esempio, se si utilizza spesso una particolare combinazione di controlli con variabili leggermente diverse, potrebbe essere utile esternalizzare la combinazione di assegni in una funzione e chiamarla laddove appropriato.
Ricordo di aver visto un progetto che era stato scritto per la maggior parte, ma aveva un problema di questo tipo. Ad esempio, il codice per analizzare il file di configurazione è stato duplicato in questo modo:

if (file_exists("configfile")) { 
    /* tons of code here */ 
} else if (file_exists("/etc/configfile")) { 
    /* almost the same code again */ 
} 

Questo è un esempio estremo, ma si ottiene l'idea.

Problemi correlati