Standardele sunt o realitate omniprezentă, întâlnită în toate palierele existenței noastre: de la în construcția caselor și a ecranelor fabricate cu anumite rezoluții, până la dimensiunile hainelor pe care le purtăm și la modul în care măsurăm orice din jurul nostru.În cazul limbajului PHP, aceste standarde se materializează sub forma PSR-urilor. Vă invităm într-o călătorie inițiatică în lumea acestora pentru a înțelege mai bine ecosistemul PHP-ului și tendințele de viitor ale acestuia.
Orice limbaj de programare are standarde și metode best-practice de a rezolva probleme. Chiar și PHP-ul a avut astfel de elemente, însă cele mai multe dintre ele erau împrăștiate în variate părți ale comunității, fără o entitate care să le centralizeze, să le guverneze și să se ocupe de promovarea acestora.
În 2009, toate acestea s-au schimbat deoarece cinci dezvoltatori de framework-uri PHP s-au întâlnit la conferința php|tek Chicago 2009 și au decis înființarea unei entități care să rezolve problema standardelor în PHP o dată pentru totdeauna. Grupul s-a auto-denumit PHP-FIG (PHP Framework Interoperability Group). La scurt timp după înființare, primul standard propus de ei a fost publicat și denumit PSR-0. Acest standard a venit ca urmare a noului suport pentru namespace-uri introdus în PHP 5.3 în același an și a urmărit să standardizeze felul în care era folosită această nouă facilitate.
PSR este prescurtarea denumirii PHP Standard Recommendation. Aceste standarde au un mod de funcționare foarte asemănător cu JSR-urile (Java Specification Request) din ecosistemul Java. Ele sunt numerotate începând cu 0 și conțin o specificație formală pentru o anumită tehnică de programare sau funcționalitate care poate fi implementată în PHP.
La momentul scrierii acestui articol, șapte standarde PSR au fost acceptate și folosite:
PSR-0. După cum am menționat în capitolul precedent, acest standard descrie un mod corect și consistent în care se pot declara și folosi namespace-uri. PSR-0 este marcat ca fiind deprecated în favoarea mai noului PSR-4.
PSR-1 specifică reguli foarte generale de codare, în general rudimentare și de structura la nivel macro a codului și fișierelor în care se află acesta. Beneficiile acestui standard sunt masive, deoarece respectarea lui scade dramatic șansele de incompatibilitate între clase și librării.
PSR-2 construiește peste PSR-1 și este unul dintre cele mai vaste standarde dintre cele șapte datorită numărului extensiv de reguli pe care le conține, în mare parte legate de stilizarea codului. Acesta acoperă cu recomandări aproape fiecare structură și facilitate de limbaj a PHP-ului: de la metode, structuri de control și paranteze, până la lungimea liniilor, indentare și numărul de linii goale dintre diferitele structuri.
PSR-3 definește o interfață standard pentru librăriile de logare. De asemenea, se oferă multe sfaturi legate de cum să fie implementată și folosită o astfel de funcționalitate.
PSR-4 este succesorul mai vechiului PSR-0 și descrie metoda corectă de a încărca namespace-uri din anumite căi de fișiere. Acesta e un standard mai flexibil în ceea ce privește sintaxa și aspectele de care trebuie ținut cont în cadrul operațiunii de încărcare.
PSR-6 definește un set de interfețe și excepții care ar trebui implementate și folosite de către sistemele de caching. Din cauza ariei extinse pe care acesta o acoperă, implementarea unui astfel de sistem este mai dificilă decât în cazul altor standarde PSR.
Câteva din standardele descrise mai sus nu sunt inventate de la zero, ci sunt bazate pe câteva din celebrele referințe RFC. De asemenea, toate standardele PSR folosesc specificațiile RFC-2119 în care se descriu câțiva termeni generali de vocabular care trebuie folosiți într-o specificație formală.
Mecanismele PHP-FIG se aseamănă foarte mult cu cele folosite în ecosistemul Java pentru standardele JSR:
grupul este format din membri care reprezintă un anumit framework sau librărie.
aceștia propun un nou standard, dacă este suficient interes pentru așa ceva din partea comunității.
propunerile noi sunt discutate și revizuite în mod public, pentru a le aduce la un nivel cât mai înalt de calitate și pentru a fi pregătite pentru vot.
propunerile vor deveni standarde prin votul democratic al membrilor PHP-FIG.
De-a lungul timpului au existat multe controverse legate de obiectivitatea și utilitatea acestui grup. În timp ce e foarte posibil ca unele îngrijorări să fie bine fondate, trebuie să ținem cont de un aspect crucial al acestui grup și standardele care le propune: implementarea sau aderarea la ele este total opțională.
Din acest punct de vedere, standardele PSR împărtășesc aceleași caracteristici ca și design-pattern-urile:
sunt feluri corecte de rezolva o problemă.
au fost gândite și rafinate de o armată de programatori inteligenți.
oferă un vocabular comun și succint de comunicare a soluțiilor.
Pe lângă toate acestea, trebuie să menționăm scopul principal al grupului: colaborarea între framework-uri (de unde și numele). Prin urmare, standardele propuse și acceptate vor avea tendința să acopere funcționalități oferite de majoritatea framework-urilor; Preocuparea este de a avea o metodă ușoară de a comuta între diferitele librării pe care aceste framework-uri se bazează.
Cu toate că a fost perceput drept controversat, grupul PHP-FIG a reușit să se impună drept cea mai autoritară entitate a standardelor din lumea PHP-ului. Introducerea de către acest grup a standardelor PSR marchează începutul unei maturizări consistente a ecosistemului PHP.
de Șerban Țîr
de Mircea Vădan
de Augusta Ene , Cosmin Lazar