Domanda

Un buon design impone di scrivere una sola volta ciascuna funzione. In PHP lo sto facendo usando i file include (come Utils.php e Authenticate.php), con il comando PHP include_once. Tuttavia non sono stato in grado di trovare alcun standard o best practice per i file include PHP. Cosa consiglieresti a StackOverflow?

Sto cercando:

  • Standard di denominazione
  • Standard di codice
  • Design Patterns
  • Suggerimenti per la definizione di tipi di ritorno di funzioni comuni (ora sto solo usando array associativi).
È stato utile?

Soluzione

Una convenzione che mi piace usare è quella di mettere ogni classe nel suo file chiamato ClassName.class.php e quindi impostare caricatore automatico per includere i file di classe. O a volte li inserirò tutti in una sottodirectory / classi e li chiamerò ClassName.php. Dipende da quante lezioni class vs non class mi aspetto.

Se organizzi le tue funzioni di utilità in classi e le trasformi in metodi statici, puoi cavartela scrivendo solo una singola require_once () nei tuoi file di livello superiore. Questo approccio può o meno essere appropriato per il tuo codice o il tuo stile di codifica.

Per quanto riguarda i tipi di restituzione, provo a seguire le convenzioni utilizzate nelle funzioni integrate. Restituisce un tipo appropriato alla richiesta o restituisce false in caso di errore. Assicurati solo di utilizzare === operatore per verificare false nei risultati.

Il fatto che ti preoccupi delle convenzioni suggerisce che sei già sulla buona strada. Se hai familiarità con qualsiasi altro linguaggio OOP come Java, C ++, C #, ecc., Scoprirai che puoi seguire molte delle stesse convenzioni grazie a Bontà OOP in PHP5 .

Altri suggerimenti

Qualunque sia la convenzione di denominazione che si utilizza (preferisco prendere spunti da Java o C # ove possibile) assicurarsi di utilizzare i file di inclusione per funzioni che in realtà non eseguono alcun codice al momento dell'inclusione e di non includere mai lo stesso file due volte. (usa include-once o request-once )

Alcuni di questi standard sono già stati scritti. Seguiranno progetti di grandi dimensioni e standard propri.

Eccone uno scritto da Zend ed è lo standard usato nel framework Zend. http://framework.zend.com/manual/en/coding-standard. html

Inoltre, PEAR aveva sempre degli standard di codifica abbastanza rigidi: http://pear.php.net/manual/en/standards.php

La mia risposta preferita è che per il tuo progetto dovresti usare ciò con cui ti senti a tuo agio ed essere coerente internamente. Per altri progetti, segui le loro regole. La coerenza consente la massima leggibilità del codice. I miei standard non sono gli stessi di quelli PEAR. Non rientro con quattro spazi (utilizzo le tabulazioni) e non uso mai i casi di cammello come nomi di funzioni, ma comunque se sto modificando qualcosa da un altro progetto, andrò con qualunque cosa faccia quel progetto.

Ho fatto quanto segue. Innanzitutto, ho creato un filtro di intercettazione, per intercettare tutte le richieste Web, ho anche creato una versione che avrebbe funzionato con i comandi della riga di comando.

Entrambi gli intercettori andrebbero in un file di boot strap, che imposterebbe un caricatore automatico. Questo file è la funzione di caricamento automatico e un hash. Per l'hash la chiave è il nome della classe e il valore è il percorso del file di classe. La funzione di caricamento automatico prenderà semplicemente il nome della classe ed eseguirà un requisito sul file.

Alcuni suggerimenti sulle prestazioni se ne hai bisogno, usa virgolette singole nella definizione del file, poiché sono leggermente più veloci poiché non sono interpretate, inoltre usa richiedi / includi, invece delle loro versioni _once, questo è garantito per funzionare una volta, e il primo è un po 'più veloce.

Quanto sopra è fantastico, infatti, anche con una grande base di codice con una tonnellata di classi, l'hash non è così grande e le prestazioni non sono mai state un problema. E, cosa ancora più importante, non siamo sposati con una pazza pseudo nomea convenzione di denominazione delle classi spaziali, vedi sotto.

L'altra opzione è il nome delimitato, trucco spaziale pseudo nome. Questo è meno interessante in quanto gli spazi dei nomi arriveranno con 5.3 e vedo che questo è grossolano in quanto rinominarli in base al codice sarà meno divertente. Indipendentemente da ciò, è così che funziona, assume una radice per tutto il tuo codice. Quindi, tutte le classi vengono denominate in base al movimento trasversale della directory richiesto per arrivarci, delimitate da un carattere, come '_', e quindi dal nome della classe stessa, tuttavia il file verrà chiamato dopo la classe. In questo modo la posizione della classe viene codificata nel nome e il caricatore automatico può utilizzarlo. Il problema con questo metodo oltre a really_long_crazy_class_names_MyClass, è che c'è un bel po 'di elaborazione su ogni chiamata, ma potrebbe essere un'ottimizzazione prematura, e di nuovo stanno arrivando spazi dei nomi.

ad es.

/code root
ClassA ClassA.php
  /subfolder
  subFolder_ClassB ClassB.php
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top