Wenn Sie ein begeisterter PHP-Entwickler sind, ist es wahrscheinlich, dass Sie auf die Abkürzung gestoßen sind, PSR, das steht für "PHP Standards Recommendation". Zum Zeitpunkt dieses Schreibens gibt es vier davon: PSR-0 bis PSR-3. Lassen Sie uns einen Blick darauf werfen, was diese sind und warum Sie sich darum kümmern sollten (und teilnehmen sollten)..
PHP hatte noch nie einen einheitlichen Standard für das Schreiben von Code. Diejenigen, die verschiedene Codebases unterhalten, haben Zeit, um ihre eigenen Namenskonventionen und Richtlinien für den Codierungsstil zu schreiben. Einige dieser Entwickler erben einen gut dokumentierten Standard, z. B. PEAR oder Zend Framework. Wieder andere entscheiden sich dafür, Standards völlig neu zu schreiben.
Zögern Sie nicht, ein neues Thema in der Mailingliste zu öffnen.
Auf der php | tek-Konferenz im Jahr 2009 diskutierten Vertreter verschiedener Projekte über ihre Möglichkeiten, zwischen Projekten zu arbeiten. Es ist sicherlich nicht überraschend, dass das Festhalten an einer Reihe von Standards zwischen Codebasis der Hauptagenda-Punkt war.
Bis vor Kurzem bezeichneten sie sich selbst als "PHP Standards Group", aber jetzt arbeiten sie unter dem Dach "Framework Interoperability Group" (BILD). Wie sie sich fühlten, beschrieb der Erstere die Absichten der Gruppe nicht genau. Obwohl der Name dieser Gruppe explizit auf Frameworks verweist, wurden Entwickler, die alle möglichen Projekte vertreten, als stimmberechtigte Mitglieder akzeptiert.
Die FIG beabsichtigt, einen Querschnitt des PHP-Ökosystems zu beherbergen, nicht ausschließlich Framework-Entwickler. Zum Beispiel haben die Symfony-, Lithium- und CakePHP-Frameworks jeweils einen Vertreter als stimmberechtigtes Mitglied, das gleiche gilt für PyroCMS, phpDocumentor und sogar Composer.
Die stimmberechtigten Mitglieder können an Abstimmungen teilnehmen oder daran teilnehmen. Jeder andere Benutzer (einschließlich Sie!) Kann jedoch ein Mitglied der PHP-FIG Community werden, indem er die PHP-FIG-Mailingliste abonniert.
In dieser Mailingliste finden Diskussionen, Abstimmungen, Vorschläge und Feedback statt.
Das Ziel der FIG ist es, einen Dialog zwischen Projektvertretern zu schaffen, um Wege zur Zusammenarbeit zu finden (Interoperabilität). Zur Zeit dieses Schreibens hat dieser Dialog vier Empfehlungen für PHP-Standards hervorgebracht: PSR-0 bis PSR-3.
Diese Empfehlungen sind kostenlos und können von jedermann angenommen werden, obwohl niemand dazu verpflichtet ist. Tatsächlich müssen die stimmberechtigten Mitglieder keine der PSRs in den von ihnen vertretenen Projekten implementieren!
PSR-0 ist ein großer Schritt nach vorne für wiederverwendbaren Code.
Erinnern Sie sich, wie Sie früher viele angegeben haben benötigen
Anweisungen, um auf alle benötigten Klassen zu verweisen? Glücklicherweise änderte sich dieses Muster mit der Magie von PHP 5 __autoload ()
Funktion. PHP 5.1.2 hat das Autoloading durch die Einführung noch verbessert spl_autoload ()
, Damit können Sie eine Kette von Autoloading-Funktionen mit registrieren spl_autoload_register ()
.
Egal wie gut die Autoloading-Funktionalität ist, sie definiert nicht, wie sie mit vorhandenen Codebasen implementiert werden soll. Zum Beispiel, Bibliothek X kann sich an die Verzeichnis- und Klassennamen-Struktur anders anpassen als Bibliothek Y, Möglicherweise möchten Sie jedoch beide verwenden!
Wenn Sie einen richtigen Autoloader schreiben, der weiß, wo nach allen möglichen vollständig qualifizierten Namen zu suchen ist, und alle Dateierweiterungen (.class.php, inc.php, .php usw.) testen, wird dies schnell zum Chaos. Ohne einen Standard, der definiert, wie Klassen benannt werden und wo sie platziert werden müssen, wäre die Interoperabilität mit Autoloader immer noch ein Traum.
Treffen Sie PSR-0. Eine Standardempfehlung, die "die zwingenden Anforderungen beschreibt, die für die Interoperabilität des Autoloaders einzuhalten sind".
PSR-0 ist ein großer Schritt nach vorne für wiederverwendbaren Code. Wenn ein Projekt dem PSR-0-Standard entspricht und seine Komponenten lose miteinander verbunden sind, können Sie diese Komponenten einfach in ein "Vendor" -Verzeichnis aufnehmen und einen mit PSR-0 kompatiblen Autoloader verwenden, um diese Komponenten einzuschließen. Oder, noch besser, lassen Sie Composer das für Sie tun!
Dies ist beispielsweise genau das, was Laravel mit zwei Symfony-Komponenten (Console und HttpFoundation) ausführt..
Die FIG hat eine beispielhafte Implementierung einer PSR-0-kompatiblen Autoloader-Funktion, bei der registriert werden kann spl_autoload_register ()
, Sie können jedoch eine der flexibleren Implementierungen verwenden, z. B. den entkoppelten Symfony ClassLoader oder den Autoloader von Composer.
PSR-1 konzentriert sich auf einen grundlegenden Codierungsstandard.
Nach der Akzeptanz von PSR-0 gab es eine lange Periode niedriger Aktivität in der FIG. Tatsächlich dauerte es eineinhalb Jahre, bis die Dokumente PSR-1 und PSR-2 genehmigt wurden.
PSR-1 konzentriert sich auf einen grundlegenden Codierungsstandard. Es verzichtet darauf, zu detailliert zu sein, und beschränkt sich dabei auf eine Reihe von Grundregeln, um "ein hohes Maß an technischer Interoperabilität zwischen gemeinsamem PHP-Code zu gewährleisten"..
und =
Stichworte.
Die Grundregeln konzentrieren sich auf Namenskonventionen und Dateistruktur. Dadurch wird sichergestellt, dass sich der gesamte gemeinsam genutzte PHP-Code auf hoher Ebene gleich verhält und so aussieht. Stellen Sie sich eine Anwendung vor, die zahlreiche Komponenten von Drittanbietern verwendet, und alle verwenden unterschiedliche Namenskonventionen und Zeichencodierungen. Das wäre ein Durcheinander!
Der Zweck des PSR-2 besteht darin, einen einzigen Style Guide für PHP-Code zu haben, der zu einem einheitlich formatierten, gemeinsam genutzten Code führt.
PSR-2 erweitert und erweitert die grundlegenden Codierungsstandards von PSR-1. Sein Zweck besteht darin, einen einzigen Style Guide für PHP-Code zu haben, der zu einheitlich formatiertem, gemeinsam genutzten Code führt.
Die Regeln des Kodierungsstilleitfadens wurden nach einer umfassenden Umfrage festgelegt, die die stimmberechtigten FIG-Mitglieder erhielten.
Die von den stimmberechtigten Mitgliedern vereinbarten Regeln in PSR-2 spiegeln nicht unbedingt die Präferenzen jedes PHP-Entwicklers wider. Seit dem Beginn der FIG hat die PHP-FIG jedoch festgestellt, dass ihre Empfehlungen immer für die FIG selbst waren; Andere, die bereit sind, die Empfehlungen anzunehmen, sind ein positives Ergebnis.
Die vollständige PSR-2-Spezifikation finden Sie im Repository von fig-standards. Lesen Sie es unbedingt durch.
In einer idealen Welt würde jedes PHP-Projekt die Empfehlungen von PSR-1 und PSR-2 übernehmen. Aufgrund des Geschmacks (z. B. "Benennungskonvention x sieht besser aus als y!", "Tabs über Leerzeichen!") Und aufgrund der historischen Segmentierung zwischen verschiedenen Codierungsstilen gab es jedoch nur eine geringe Anzahl von PHP-Projekten, die PSR-1 und PSR- 2 in seiner Gesamtheit.
PSR-3 beschreibt eine gemeinsam genutzte Protokollierungsschnittstelle.
Die PHP-Standardempfehlung Nr. 3 ist die jüngste Ergänzung zu den anerkannten FIG-Standards. Es wurde am 27. Dezember 2012 mit einer beeindruckenden Stimmenzahl von 18 zu 0 angenommen (8 stimmende Mitglieder haben keine Stimme abgegeben)..
PSR-3 beschreibt eine gemeinsam genutzte Protokollschnittstelle, die die acht Syslog-Ebenen des Syslog-Protokolls (RFC 5424) enthält: Debug, Info, Benachrichtigung, Warnung, Fehler, kritisch, Alarm und Notfall.
Diese acht Syslog-Ebenen sind als Methodennamen definiert, die zwei Parameter akzeptieren: eine Zeichenfolge mit einem Protokoll $ message
und optional $ context
Array mit zusätzlichen Daten, die nicht gut in die vorherige Zeichenfolge passen. Implementierer können dann Platzhalter in ersetzen $ message
mit Werten von $ context
.
Ein gemeinsam genutzter Schnittstellenstandard, wie PSR-3, führt dazu, dass Frameworks, Bibliotheken und andere Anwendungen in der Lage sind, einen Hinweis auf diese gemeinsam genutzte Schnittstelle einzugeben, sodass Entwickler eine bevorzugte Implementierung auswählen können.
Mit anderen Worten: Wenn bekannt ist, dass eine Protokollierungskomponente an PSR-3 haftet, kann sie einfach mit einer anderen PSR-3-kompatiblen Protokollierungskomponente ausgetauscht werden. Dies gewährleistet maximale Interoperabilität zwischen Aufrufen von Loggerimplementierungen.
Monolog hat kürzlich PSR-3 implementiert. Es ist daher bekannt, das umzusetzen Psr \ Log \ LoggerInterface
und die dazugehörigen Richtlinien im PSR-3-Dokument.
Die PHP-FIG leistet hervorragende Arbeit bei der Zentralisierung von PHP-Standards.
Einige Leute sagen, die PSR gehen zu weit, um einen globalen Satz von Standards zu definieren, um einen Kodierungsstil zu definieren - etwas, das eher subjektiv als objektiv ist. Andere meinen, eine gemeinsame Schnittstelle sei zu spezifisch und nicht flexibel. Kritik ist jedoch bei jeder Standardinitiative selbstverständlich. Die Leute mögen es nicht, wie Identifikatoren benannt werden sollen, welche Einrückung verwendet wird oder wie die Standards gebildet werden.
Die meiste Kritik und Reflexion findet von der Seitenlinie aus statt, nach dem Die Standards werden akzeptiert - auch wenn das Standardformular in der Mailingliste (das für jeden offen ist, mitzumachen und Feedback, Kommentare oder Vorschläge abzugeben) offen ist. Zögern Sie nicht, ein neues Thema in der Mailingliste zu öffnen, wenn Sie der Meinung sind, dass Sie etwas Wertvolles hinzufügen.
Es ist auch wichtig zu wissen, dass es nicht die spezifische Kombination von Regeln ist, die zum Nutzen der empfohlenen Standards beitragen, sondern über ein einheitliches Regelwerk, das von verschiedenen Codebasen gemeinsam genutzt wird.
Indem sich jeder seinen eigenen Vorlieben entzieht, haben wir einen einheitlichen Stil von außen nach innen, was bedeutet, dass ich jedes Paket verwenden kann - nicht nur das, was auch immer camelCase ist.
- Phil Sturgeon in der PHP-FIG-Mailingliste
Die FIG beabsichtigt, einen Querschnitt des PHP-Ökosystems zu beherbergen, nicht nur Framework-Entwickler.
Mit einer wachsenden Anzahl einflussreicher stimmberechtigter Mitglieder und vier akzeptierten Standards gewinnt die FIG in der PHP-Community sicherlich an Bedeutung. PSR-0 ist bereits weit verbreitet, und hoffentlich folgen PSR-1 und PSR-2, um eine einheitlichere PHP-Version zu erreichen.
Mit der gemeinsam genutzten Schnittstelle, die in PSR-3 definiert ist, hat die Framework Interoperability Group eine neue Richtung genommen, um Standards zu empfehlen. Sie gehen immer noch in diese Richtung, da der Inhalt neuer gemeinsam genutzter Schnittstellen auf der Mailingliste diskutiert wird.
Derzeit gibt es eine interessante Diskussion über den Vorschlag eines HTTP-Nachrichtenpakets, das gemeinsame Schnittstellen für die Implementierung eines HTTP-Clients enthält. Es gibt auch verschiedene Diskussionen, die eine gemeinsam genutzte Cache-Schnittstelle vorschlagen. aber jetzt scheint es auf niedriger Aktivität zu sein.
Was auch immer das Ergebnis dieser Vorschläge sein wird, PHP-FIG leistet hervorragende Arbeit bei der Zentralisierung von PHP-Standards. Sie beeinflussen zweifellos die PHP-Ökosphäre positiv und hoffentlich werden ihre Bemühungen einen prominenteren Platz in der PHP-Programmiersprache einnehmen.
.