PSR-Duh!

Într-o lecție anterioară despre Nettuts +, învățați despre PSR; cu toate acestea, acest articol nu a detaliat procesul de integrare a stilului de codare în proiectele dvs. Să rezolvăm asta!

Notă: acest articol presupune că ați citit PSR-Huh? și înțelegeți ce se referă la PSR. Să începem cu primul standard: PSR-0.


PSR-0 - Standardul de autoloading

Pluginul PHPCS este cel mai util instrument pe care l-am folosit.

În trecut, am inclus fișierele PHP într-unul din două moduri:

  • Folosind un bloc urias de includ declarații în partea de sus a fiecărui fișier.
  • Listați toate include într-un singur fișier și includeți singurul fișier din cadrul proiectului.

Există argumente pro și contra pentru ambele abordări, dar cred că toți suntem de acord că nici soluțiile optime și nici cele moderne nu sunt. PHP5 a introdus conceptul de fișiere autoloading bazate pe numele claselor lor; astfel, PSR-0 își propune să păstreze coerența numelor de fișiere.

Spațiile de nume nu au nimic de-a face cu nume de fișiere sau cu autoloading; puteți declara din punct de vedere tehnic diferite spații de nume în același fișier. De exemplu, următorul cod este perfect valabil.

  

Sunt două Salut clase în acest singur fișier, dar se află în spații de nume diferite. Cele două linii finale ale acestui cod reprezintă instanța Salut() clase pe spațiile lor de nume. Primele iesiri "Nettuts +", in timp ce al doilea ecou "Gabriel". Spațiul de nume vă permite să faceți diferența între două clase cu același nume, la fel cum s-ar putea să fiți obișnuit cu dosarele de pe desktop. Standardul PSR-0 folosește pur și simplu avantajele spațiilor de nume, ceea ce ușurează autoloadarea cursurilor. Prin denumirea consecventă a fișierelor, puteți crea o funcție care să găsească automat fișierele necesare.

Pentru a fi conform PSR-1, trebuie să urmați și PSR-0.

Asigurați-vă că citiți standardul complet, dar să rezumați:

  • Fiecare clasă trebuie să fie numită cu numele proiectului (sau al creatorului).
  • Minusculele din cadrul clasei "trebuie convertite în separatoare de directoare.
  • Fișierele trebuie să aibă .php extensie.

De exemplu, o referință de clasă a:

 \ Nettuts \ Baza de date \ SQL_Postgres

dacă urmați PSR-0, ar trebui să traduceți în această cale:

 ./Nettuts/Database/SQL/Postgres.php

Cum putem implementa această funcție? Soluția cea mai evidentă este utilizarea compozitorului, care este livrat cu un autoloader compatibil cu PSR-0. Dacă utilizați compozitorul în proiectele dvs. (și ar trebui), optați pentru autoloader, în loc să scrieți propriul dvs..

Un încărcător compatibil cu PSR-0 vă permite să specificați o cale de bază, informând încărcătorul despre care să se uite în primul rând. Pentru a începe, creați un simplu composer.json fișier care conține următoarele JSON:

 "autoload": "psr-0": "Nettuts": "./", "Gmanricks": "furnizor /"

Acest fișier JSON îi spune Compozitorului că vrem să folosim standardul PSR-0 pentru a autologe toate Nettuts-fișiere cu nume de fișiere cu directorul curent (directorul rădăcină) ca cale de bază. De asemenea, dorim să autolozăm toate clasele cu Gmanricks spațiu de nume, în raport cu furnizor (de ex. ./ Furnizor / Gmanricks / ClassName).

Acum, tastați "compozitorul instala"pentru a genera clasele de autoload sau"compozitor dump-autoload"la modificările ulterioare pentru a regenera clasele autoload.De asemenea, nu uitați să cereți autoloader undeva la începutul proiectului.

  

Compozitorul este cea mai bună opțiune, dar pot exista scenarii atunci când doriți un autoloader mic, simplu. PHP-FIG oferă un autoloader de probă pe care îl puteți utiliza:

 funcția __autoload ($ className) $ className = ltrim ($ className, '\\'); $ fileName = "; $ namespace ="; dacă ($ 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'; cere $ fileName; 

Este important să rețineți că acest încărcător încearcă să încarce toate clasele utilizând standardul PSR din directorul curent.

Acum, că reușim cursurile cu autoloading, să trecem la următorul standard: standardul de codare de bază.


PSR-1 - Standardul de codificare de bază

PSR-1 definește liniile generale de codare, care pot fi împărțite în două părți.

Convențiile de denumire

Spațiul de nume vă permite să faceți diferența între două clase cu același nume.

Ca și în cazul oricărui limbaj de programare, în urma convențiilor de numire, codul dvs. este mai ușor de citit și de întreținut. Iată câteva reguli de urmat:

  • Numele de clase utilizează PascalCase.
  • Numele de metode ar trebui să fie în CamelCase.
  • Constantele necesită toate majusculele, separând fiecare cuvânt cu un subliniere (de ex. CONSTANT_VARIABLE).

Cod convenții:

Mai e mult decât să numim convenții; urmați și aceste îndrumări:

  • Utilizați numai sau în codul dvs. Nu închideți PHP în cadrul unei clase.
  • Fișierele ar trebui fie să declare simboluri, fie să le folosească.
  • Fișierele trebuie să fie în format UTF-8 fără BOM pentru codul PHP

Cele mai multe dintre acestea sunt explicative, însă convenția de la mijloc este puțin confuză. În esență, el dictează că orice declarație, fie că este vorba despre funcții, clase etc., trebuie separată în fișierele lor. Acest lucru nu numai că promovează cele mai bune practici, cum ar fi reutilizarea codului și separarea, dar vă păstrează codul curat și curat.

Merită menționat faptul că fiecare standard PSR se bazează pe standardul anterior PSR. Ca atare, pentru a fi conform PSR-1, trebuie să urmați și PSR-0. Urmând aceste două standarde, codul dvs. va fi redactat în mod corespunzător și introdus automat. Nu există într-adevăr un motiv să nu le urmați.

Da, unii dezvoltatori se plâng de PSR și preferă să urmeze alte convenții, dar urmând acest standard, puteți partaja codul cu toată lumea fără să vă faceți griji cu privire la coerența acestuia. Acestea fiind spuse, nimeni nu vă forțează mâna aici. Este pur și simplu o recomandare recomandată.

Următorul standard, PSR-2, se scufundă în specificul modului în care trebuie să vă structurați codul.


PSR-2 - Standardul de codificare avansată

PSR-2 se scufundă în specificul modului în care trebuie să vă structurați codul.

Apoi, ajungem la un standard pe care dezvoltatorii PHP îl luptă cel mai mult; de fapt, acesta este motivul pentru care am ales să scriu acest articol.

PSR-2 definește multe reguli, dintre care multe sunt enumerate mai jos:

  • Se vor folosi patru spații în locul filelor.
  • Lungimea ideală a liniei trebuie să fie sub 80 de caractere, dar o limită de 120 de caractere trebuie aplicată tuturor liniilor.
  • Ar trebui să existe o linie goală sub Spațiu de nume și utilizare declaraţii.
  • O breșă de deschidere a unei metode sau a unei clase trebuie să fie pe propria linie.
  • O brățară de închidere a unei metode sau a unei clase trebuie să meargă pe linie imediat după corp.
  • Toate proprietățile și metodele necesită un nivel de vizibilitate.
  • ''abstract'/'final"cuvintele cheie ar trebui să apară înaintea vizibilității în timp ce"static"merge după.
  • Structura cuvintelor cheie trebuie să fie urmată de un spațiu.
  • O armă de deschidere a unei instrucțiuni de control trebuie să apară pe aceeași linie cu instrucțiunea.

Asigurați-vă că vedeți întreaga spec. Pentru o prezentare completă.

PSR-2 este la fel de important ca PSR-1 (și PSR-0). Acesta intenționează să facă un cod ușor de citit și de întreținut. Dar, după cum se spune, "Diavolul sta in detalii."Există o mulțime de detalii de reținut, lucru care poate fi dificil dacă obiceiurile dvs. de programare diferă de ceea ce definește standardul. Din fericire, dacă sunteți la bord, există instrumente care vă ajută să aderați la PSR-0, PSR-1 și PSR-2. Poate că cel mai bun instrument este pluginul Sublime Text, PHPCS.


PHPCS - cod PHP Sniffer

Pluginul PHPCS este instrumentul cel mai util pe care l-am folosit când vine vorba de obținerea codului în formă. Acesta vă permite nu numai să vă asigurați că codul respectă standardele PSR, dar foloseste și linterul PHP pentru a verifica erorile de sintaxă. Acesta este un mare economizor de timp; nu mai trebuie să vă faceți griji cu privire la erorile de sintaxă atunci când vă testați codul în browser.

Instalați pachetul prin Control sublim de pachete (se numește Phpcs) sau, alternativ, cu Git, utilizând următoarele comenzi:

 cd ~ / Bibliotecă / Aplicație \ Suport / Sublime \ Text \ 2 / Pachete / clona git: //github.com/benmatselby/sublime-phpcs.git Phpcs

Acesta instalează plugin-ul, dar aveți nevoie de câteva dependențe înainte de a configura PHPCS. Încă o dată, cel mai simplu mod de instalare este cu Compozitorul. Navigați la un director de alegere și creați un composer.json fișier cu următoarele JSON:

 "nume": "Nettuts PHPCS Demo", "necesită": "squizlabs / php_codesniffer": "*", "phabdot / php-cs-fixer" 

Aceasta instalează cele trei dependențe în dosarul curent. Deschideți o fereastră terminală în locația de instalare și tastați compozitorul instala, și va descărca pachetele necesare.

Acum puteți configura plugin-ul în Sublime Text. Navigați la "Preferințe"> "Setări de pachete"> "Cod PHP Sniffer"> "Setări - Utilizator".

Plugin-ul trebuie să știe unde se află cele trei dependențe, precum și standardul pe care vrem să-l adere codul nostru:

 "phpcs_additional_args": "--standard": "PSR2", "-n": "", "phpcs_executable_path": "DEPENDENCY_PATH / vendor / bin / phpcs" phpmd "," php_cs_fixer_executable_path ":" DEPENDENCY_PATH / furnizor / bin / php-cs-fixer "

Aceste setări informează PHPCS că vrem să fim apelați la standardul PSR2 și să oferim calea fiecărei dependențe. Nu uitați să le înlocuiți DEPENDENCY_PATH cu calea ta reală.

Reporniți Sublime, iar codul de scanare vă va scana codul când salvați fișierele PHP.

Dând clic dreapta în editor, veți lista și câteva opțiuni noi, cum ar fi ștergerea marcajelor de eroare și încercarea de a remedia problemele non-standard. Cu toate acestea, având în vedere că punctul din acest articol este de a vă obișnuiți cu standardul, vă sugerăm să remediați manual codul și să evitați automatul baie de fixare caracteristică.


Concluzie

Standardele PSR au fost create astfel încât codul să poată fi refolosit cu ușurință de la proiect la proiect, fără a sacrifica pe consistența stilului de cod. În timp ce se pot simți la început copleșiți, puteți folosi ideile și instrumentele din acest articol pentru a vă ajuta să faceți tranziția.

Pentru a reitera ultima oară: nimeni nu vă obligă să schimbați modul în care codificați în PHP. Este pur și simplu un ghid, inițial destinat interoperabilității cadru. Acestea fiind spuse, la Nettuts +, considerăm o bună practică de urmat. Acum fă-ți mintea! Dacă aveți întrebări, să le auzim mai jos!

Cod