In una precedente lezione qui su Nettuts +, si impara su PSR; tuttavia, tale articolo non ha dettagliato il processo di integrazione di tale stile di codifica nei progetti. Risolviamolo!
Nota: questo articolo presuppone che tu abbia letto PSR-Huh? e capisca a cosa si riferisce la PSR. Iniziamo con il primo standard: PSR-0.
Il plugin PHPCS è lo strumento più utile che ho usato.
In passato, abbiamo incluso i file PHP in due modi:
Ci sono pro e contro per entrambi questi approcci, ma, penso che tutti possiamo essere d'accordo sul fatto che non ci siano soluzioni ottimali o moderne. PHP5 ha introdotto il concetto di caricare automaticamente i file in base ai loro nomi di classe; quindi, PSR-0 mira a mantenere i nomi dei file coerenti.
I namespace non hanno nulla a che fare con nomi di file o autoloading; puoi tecnicamente dichiarare diversi namespace nello stesso file. Ad esempio, il seguente codice è perfettamente valido.
Ci sono due
Ciao
classi in questo singolo file, ma risiedono in spazi dei nomi diversi. Le ultime due righe di questo codice creano un'istanza delCiao()
classi nei rispettivi spazi dei nomi. Le prime uscite "Nettuts +", mentre la seconda echos "Gabriel". I namespace ti permettono di distinguere tra due classi con lo stesso nome, proprio come potresti essere abituato a fare con le cartelle sul desktop. Lo standard PSR-0 sfrutta semplicemente i vantaggi degli spazi dei nomi, facilitando il caricamento automatico delle classi. Con la denominazione coerente dei file, è possibile creare una funzione che individua automaticamente i file necessari.Per essere compatibile con PSR-1, devi anche seguire PSR-0.
Assicurati di leggere lo standard completo, ma per riassumere:
.php
estensione.Ad esempio, un riferimento di classe di:
\ Nettuts \ Database \ SQL_Postgres
se seguendo PSR-0, dovresti tradurre in questo percorso:
./Nettuts/Database/SQL/Postgres.php
Come potremmo implementare questa funzionalità? La soluzione più ovvia è usare Composer, che viene fornito con un autoloader compatibile con PSR-0. Se utilizzi Composer nei tuoi progetti (e dovresti), allora scegli il suo caricatore automatico anziché crearne uno tuo.
Un caricatore compatibile con PSR-0 consente di specificare un percorso di base, informando il caricatore su quale directory visualizzare prima. Per iniziare, crea un semplice composer.json
file che contiene il seguente JSON:
"autoload": "psr-0": "Netsuts": "./", "Gmanricks": "fornitore /"
Questo file JSON dice a Composer che vogliamo usare lo standard PSR-0 per eseguire il caricamento automatico di tutti Nettuts
-i file con nomi assegnati con la directory corrente (la cartella radice) come percorso di base. Vogliamo anche caricare automaticamente tutte le classi con Gmanricks
spazio dei nomi, relativo al venditore
cartella (ad es. ./ Vendor / Gmanricks / NomeClasse
).
Ora, digita "installazione di compositore
"per generare le classi di caricamento automatico o"compositore dump-autoload
"sulle successive modifiche per rigenerare le classi di caricamento automatico. Inoltre, non dimenticare di richiedere il caricatore automatico da qualche parte nel tuo progetto.
Il compositore è la tua migliore opzione, ma potrebbero esserci degli scenari quando vuoi un autoloader piccolo e semplice. Il PHP-FIG fornisce un autoloader di esempio che è possibile utilizzare:
function __autoload ($ className) $ className = ltrim ($ className, '\\'); $ fileName = "; $ namespace ="; if ($ lastNsPos = strrpos ($ className, '\\')) $ namespace = substr ($ className, 0, $ lastNsPos); $ className = substr ($ className, $ lastNsPos + 1); $ fileName = str_replace ('\\', DIRECTORY_SEPARATOR, $ namespace). DIRECTORY_SEPARATOR; $ fileName. = str_replace ('_', DIRECTORY_SEPARATOR, $ className). '.Php'; richiede $ fileName;È importante notare che questo caricatore tenta di caricare tutte le classi utilizzando lo standard PSR nella directory corrente.
Ora che stiamo eseguendo il caricamento automatico delle classi, passiamo allo standard successivo: lo standard di codifica di base.
PSR-1 - Lo standard di codifica di base
La PSR-1 definisce le linee guida generali sulla codifica, che possono essere divise in due parti.
Convenzioni di denominazione
I namespace ti permettono di distinguere tra due classi con lo stesso nome.
Come con qualsiasi linguaggio di programmazione, le seguenti convenzioni di denominazione semplificano la lettura e la manutenzione del codice. Ecco alcune regole da seguire:
CONSTANT_VARIABLE
).C'è di più rispetto alle convenzioni sui nomi; segui anche queste linee guida:
o =
nel tuo codice. Non chiudere PHP all'interno di una classe.
Molti di questi sono auto-esplicativi, ma la convenzione centrale è leggermente confusa. Esso stabilisce essenzialmente che qualsiasi dichiarazione, che si tratti di funzioni, classi, ecc., Dovrebbe essere separata nei propri file. Questo non solo promuove le migliori pratiche come il riutilizzo del codice e la separazione, ma mantiene il tuo codice pulito e ordinato.
Vale la pena ricordare che ogni standard PSR si basa sul precedente standard PSR. Pertanto, per essere compatibile con PSR-1, è necessario seguire anche PSR-0. Seguendo questi due standard, il tuo codice sarà correttamente assegnato ai nomi e caricato automaticamente. Non c'è davvero una ragione per non seguirli.
Sì, alcuni sviluppatori si lamentano di PSR e preferiscono seguire altre convenzioni, ma seguendo questo standard, è possibile condividere il codice con tutti senza preoccuparsi della sua coerenza. Detto questo, nessuno ti sta forzando la mano. È semplicemente una linea guida raccomandata.
Lo standard successivo, PSR-2, si tuffa nelle specifiche di come dovresti strutturare il tuo codice.
PSR-2 si tuffa nelle specifiche di come dovresti strutturare il tuo codice.
Successivamente, arriviamo allo standard con cui gli sviluppatori di PHP sono in difficoltà; infatti, è il motivo per cui ho scelto di scrivere questo articolo.
PSR-2 definisce molte regole, molte delle quali sono elencate di seguito:
namespace
e uso
dichiarazioni.astratto
'/'finale
'le parole chiave dovrebbero apparire prima della visibilità mentre'statico
'va dopo.Assicurati di visualizzare l'intera specifica per una panoramica completa.
PSR-2 è importante tanto quanto PSR-1 (e PSR-0). Intende rendere il codice di facile lettura e manutenzione. Ma, come si suol dire, "Il diavolo è nei dettagli."Ci sono molti dettagli da ricordare, che possono essere difficili se le tue abitudini di programmazione differiscono da quelle definite dallo standard. Fortunatamente, se sei a bordo, ci sono strumenti che ti aiutano ad aderire a PSR-0, PSR-1 e PSR-2 Forse lo strumento migliore è il plug-in Sublime Text, PHPCS.
Il plugin PHPCS è lo strumento più utile che ho usato, quando si tratta di ottenere il codice in forma. Ti consente non solo di garantire che il tuo codice segua gli standard PSR, ma utilizza anche il linter di PHP per verificare la presenza di errori di sintassi. Questo è un ottimo risparmio di tempo; non devi più preoccuparti degli errori di sintassi quando collaudi il tuo codice nel browser.
Installa il pacchetto tramite Sublime Package Control (si chiama Phpcs) o, in alternativa, con Git, usando i seguenti comandi:
cd ~ / Library / Application \ Support / Sublime \ Text \ 2 / Packages / git clone git: //github.com/benmatselby/sublime-phpcs.git Phpcs
Questo installa il plug-in, ma sono necessarie alcune dipendenze prima di poter configurare PHPCS. Ancora una volta, il modo più semplice per installarli è con Composer. Sfoglia una directory di tua scelta e crea un composer.json
file con il seguente JSON:
"name": "Nettuts PHPCS Demo", "require": "squizlabs / php_codesniffer": "*", "fabpot / php-cs-fixer": "*", "phpmd / phpmd": "*"
Questo installa le tre dipendenze nella cartella corrente. Aprire una finestra di terminale nella posizione di installazione e digitare installazione di compositore
, e scaricherà i pacchetti necessari.
Ora puoi configurare il plugin in Sublime Text. Passare a "Preferenze"> "Impostazioni pacchetto"> "Sniffer codice PHP"> "Impostazioni - Utente".
Il plugin ha bisogno di sapere dove risiedono le tre dipendenze, così come lo standard a cui vogliamo che il nostro codice aderisca:
"phpcs_additional_args": "- standard": "PSR2", "-n": "", "phpcs_executable_path": "DEPENDENCY_PATH / vendor / bin / phpcs", "phpmd_executable_path": "DEPENDENCY_PATH / vendor / bin / phpmd "," php_cs_fixer_executable_path ":" DEPENDENCY_PATH / vendor / bin / php-cs-fixer "
Queste impostazioni informano PHPCS che vogliamo aderire allo standard PSR2 e fornire il percorso di ciascuna dipendenza. Non dimenticare di sostituire DEPENDENCY_PATH
con il tuo percorso attuale.
Riavvia Sublime e lo sniffer del codice eseguirà la scansione del tuo codice quando salvi i tuoi file PHP.
Facendo clic con il tasto destro nell'editor verranno elencate anche diverse nuove opzioni, come la cancellazione dei segni di errore e il tentativo di correggere i problemi non standard. Tuttavia, considerando che il punto di questo articolo è quello di farti abituare allo standard, suggerisco di correggere manualmente il codice ed evitare l'automatico fissatore caratteristica.
Gli standard PSR sono stati creati in modo tale che il codice potesse essere facilmente riutilizzato da un progetto all'altro, senza sacrificare la coerenza dello stile del codice. Anche se all'inizio potrebbero sembrare travolgenti, puoi utilizzare le idee e gli strumenti di questo articolo per aiutarti a effettuare la transizione.
Per ripetere un'ultima volta: nessuno ti obbliga a cambiare il modo in cui codifichi in PHP. È semplicemente una guida, originariamente pensata per l'interoperabilità del framework. Detto questo, a Nettuts +, lo consideriamo una buona pratica da seguire. Adesso fatti la tua idea! Se hai qualche domanda, sentiamoli qui sotto!