PSR-Duh!

In einer vorherigen Lektion hier auf Nettuts + erfahren Sie mehr über PSR. In diesem Artikel wurde jedoch nicht detailliert beschrieben, wie dieser Codierungsstil in Ihre Projekte integriert wird. Lass uns das reparieren!

Hinweis: In diesem Artikel wird davon ausgegangen, dass Sie PSR-Huh gelesen haben und verstehen, worauf sich PSR bezieht. Beginnen wir mit dem ersten Standard: PSR-0.


PSR-0 - Der Autoloading-Standard

Das PHPCS-Plugin ist das hilfreichste Werkzeug, das ich verwendet habe.

In der Vergangenheit haben wir PHP-Dateien auf zwei Arten hinzugefügt:

  • Verwenden Sie einen riesigen Block von Include-Anweisungen am Anfang jeder Datei.
  • Listen Sie alle Include-Dateien in einer einzigen Datei auf und fügen Sie diese einzelne Datei in Ihr Projekt ein.

Beide Ansätze haben Vor- und Nachteile, aber ich denke, wir können uns alle darauf einigen, dass es keine optimalen oder modernen Lösungen gibt. PHP5 führte das Konzept des automatischen Ladens von Dateien basierend auf ihren Klassennamen ein. Daher zielt PSR-0 darauf ab, Dateinamen konsistent zu halten.

Namensräume haben nichts mit Dateinamen oder automatischem Laden zu tun. Sie können technisch unterschiedliche Namespaces in derselben Datei deklarieren. Der folgende Code ist beispielsweise vollkommen gültig.

  

Es gibt zwei Hallo Klassen in dieser einzelnen Datei, aber sie befinden sich in verschiedenen Namespaces. Die letzten beiden Zeilen dieses Codes instanziieren die Hallo() Klassen in ihren jeweiligen Namespaces. Der erste gibt "Nettuts +" aus, der zweite Echo "Gabriel". Mit Namespaces können Sie zwischen zwei Klassen mit demselben Namen unterscheiden, ähnlich wie Sie es von Ordnern auf Ihrem Desktop gewohnt sind. Der PSR-0-Standard nutzt einfach die Vorteile von Namespaces, sodass Sie Ihre Klassen automatisch laden können. Durch die konsistente Benennung Ihrer Dateien können Sie eine Funktion erstellen, mit der die erforderlichen Dateien automatisch gesucht werden.

Um PSR-1-kompatibel zu sein, müssen Sie auch PSR-0 befolgen.

Lesen Sie den vollständigen Standard, aber fassen Sie ihn zusammen:

  • Jede Klasse muss mit dem Namen des Projekts (oder des Erstellers) benannt werden.
  • Unterstriche innerhalb des Klassennamens sollten in Verzeichnisseparatoren konvertiert werden.
  • Dateien müssen die .php Erweiterung.

Zum Beispiel eine Klassenreferenz von:

 \ Nettuts \ Database \ SQL_Postgres

Wenn folgendes PSR-0, sollte in diesen Pfad übersetzt werden:

 ./Nettuts/Database/SQL/Postgres.php

Wie können wir diese Funktionalität implementieren? Die naheliegendste Lösung ist die Verwendung von Composer, der mit einem PSR-0-kompatiblen Autoloader geliefert wird. Wenn Sie Composer in Ihren Projekten einsetzen (und Sie sollten), entscheiden Sie sich für den Autoloader, anstatt Ihren eigenen zu schreiben.

Mit einem PSR-0-kompatiblen Ladeprogramm können Sie einen Basispfad angeben und dem Ladeprogramm mitteilen, in welchem ​​Verzeichnis zuerst nachgeschaut werden soll. Erstellen Sie zunächst eine einfache composer.json Datei, die die folgende JSON enthält:

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

Diese JSON-Datei teilt Composer mit, dass wir den PSR-0-Standard verwenden möchten, um alle automatisch zu laden Nettuts-Namespace-Dateien mit dem aktuellen Verzeichnis (dem Stammordner) als Basispfad. Wir möchten auch alle Klassen automatisch mit laden Gmanricks Namensraum, relativ zum Verkäufer Ordner (z. ./ Anbieter / Gmanricks / Klassenname).

Nun tippe "Komponist installieren"um die Autoload-Klassen zu erzeugen, oder"composer dump-autoload"bei nachfolgenden Bearbeitungen, um die Autoload-Klassen neu zu generieren. Vergessen Sie auch nicht, den Autoloader irgendwo in Ihrem Projekt anzufordern.

  

Composer ist die beste Option, es kann jedoch Situationen geben, in denen Sie einen kleinen, einfachen Autoloader benötigen. Die PHP-FIG bietet einen Beispiel-Autoloader, den Sie verwenden können:

 Funktion __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'; erfordern $ fileName; 

Es ist wichtig zu wissen, dass dieser Loader versucht, alle Klassen mit dem PSR-Standard im aktuellen Verzeichnis zu laden.

Jetzt, da wir erfolgreich Klassen automatisch laden, wollen wir zum nächsten Standard übergehen: dem grundlegenden Codierstandard.


PSR-1 - Der grundlegende Codierungsstandard

PSR-1 definiert allgemeine Codierungsrichtlinien, die in zwei Teile unterteilt werden können.

Regeln der Namensgebung

Mit Namespaces können Sie zwei Klassen mit demselben Namen unterscheiden.

Wie in jeder Programmiersprache ist die Einhaltung von Namenskonventionen für die Lesbarkeit und Pflege Ihres Codes letztlich einfacher. Hier sind ein paar Regeln zu befolgen:

  • Klassennamen verwenden PascalCase.
  • Methodennamen sollten in sein camelCase.
  • Konstanten erfordern alle Großbuchstaben, die jedes Wort mit einem Unterstrich trennen (z. CONSTANT_VARIABLE).

Code-Konventionen:

Es gibt mehr als nur Namenskonventionen; Folgen Sie auch diesen Richtlinien:

  • Benutz nur oder in Ihrem Code. Schließen Sie PHP nicht innerhalb einer Klasse.
  • Dateien sollten entweder Symbole deklarieren oder verwenden.
  • Dateien müssen im UTF-8-Format ohne BOM für PHP-Code vorliegen

Die meisten davon sind selbsterklärend, aber die mittlere Konvention ist etwas verwirrend. Sie schreibt im Wesentlichen vor, dass jede Deklaration, sei es Funktionen, Klassen usw., in ihre eigenen Dateien aufgeteilt werden sollte. Dies fördert nicht nur bewährte Methoden wie Wiederverwendung und Trennung von Code, sondern hält Ihren Code sauber und ordentlich.

Es ist erwähnenswert, dass jeder PSR-Standard auf dem vorherigen PSR-Standard aufbaut. Um PSR-1-kompatibel zu sein, müssen Sie auch PSR-0 befolgen. Wenn Sie diese beiden Standards befolgen, wird Ihr Code ordnungsgemäß mit einem Namensbereich versehen und automatisch geladen. Es gibt wirklich keinen Grund, ihnen nicht zu folgen.

Ja, einige Entwickler beschweren sich über PSR und ziehen es vor, andere Konventionen zu befolgen. Wenn Sie diesen Standard befolgen, können Sie Code mit allen teilen, ohne sich um die Konsistenz zu sorgen. Trotzdem zwingt niemand Ihre Hand hier. Es ist einfach eine empfohlene Richtlinie.

Der nächste Standard, PSR-2, geht auf die Besonderheiten der Strukturierung Ihres Codes ein.


PSR-2 - Der erweiterte Kodierungsstandard

PSR-2 geht auf die Besonderheiten der Strukturierung Ihres Codes ein.

Als Nächstes kommen wir zu dem Standard, mit dem PHP-Entwickler am meisten zu kämpfen haben. Das ist der Grund, warum ich mich für diesen Artikel entschieden habe.

PSR-2 definiert viele Regeln, von denen viele unten aufgeführt sind:

  • Anstelle von Registerkarten sollten vier Leerzeichen verwendet werden.
  • Die ideale Zeilenlänge sollte unter 80 Zeichen liegen, aber für alle Zeilen sollte eine weiche Grenze von 120 Zeichen festgelegt werden.
  • Es sollte eine leere Zeile unter der Namespace und benutzen Erklärungen.
  • Die öffnende Klammer einer Methode oder Klasse muss in einer eigenen Zeile stehen.
  • Die schließende Klammer einer Methode oder Klasse muss unmittelbar nach dem Körper auf der Linie stehen.
  • Alle Eigenschaften und Methoden erfordern einen Sichtbarkeitsgrad.
  • Das 'abstrakt'/'Finale"Keywords sollten vor der Sichtbarkeit angezeigt werden."statisch'geht nach.
  • Schlüsselwörter der Kontrollstruktur müssen von einem Leerzeichen gefolgt werden.
  • Die öffnende Klammer einer Steueranweisung sollte in derselben Zeile wie die Anweisung stehen.

Stellen Sie sicher, dass Sie die gesamte Spezifikation für eine vollständige Übersicht anzeigen.

PSR-2 ist genauso wichtig wie PSR-1 (und PSR-0). Es soll Code leicht lesbar und wartbar machen. Aber wie sie sagen "Der Teufel steckt im Detail."Es gibt viele Details, die zu beachten sind, die schwierig sein können, wenn sich Ihre Programmiergewohnheiten von den Standards unterscheiden, die der Standard definiert. Wenn Sie an Bord sind, gibt es Tools, mit deren Hilfe Sie sich an PSR-0, PSR-1 und halten können PSR-2: Das vielleicht beste Werkzeug ist das Sublime Text Plugin PHPCS.


PHPCS - PHP Code Sniffer

Das PHPCS-Plugin ist das hilfreichste Werkzeug, das ich verwendet habe, wenn es darum geht, Code in Form zu bringen. Damit können Sie nicht nur sicherstellen, dass Ihr Code den PSR-Standards entspricht, sondern auch den PHP-Interpreter verwenden, um auf Syntaxfehler zu prüfen. Dies ist eine große Zeitersparnis. Sie müssen sich nicht mehr um Syntaxfehler kümmern, wenn Sie Ihren Code im Browser testen.

Installieren Sie das Paket über Sublime Package Control (es heißt Phpcs) oder alternativ mit Git. Verwenden Sie dazu die folgenden Befehle:

 cd ~ / Library / Application \ Support / Sublime \ Text \ 2 / Packages / git clone git: //github.com/benmatselby/sublime-phpcs.git Phpcs

Dadurch wird das Plugin installiert, aber Sie benötigen einige Abhängigkeiten, bevor Sie PHPCS konfigurieren können. Der einfachste Weg, sie zu installieren, ist der Composer. Navigieren Sie zu einem Verzeichnis Ihrer Wahl und erstellen Sie eine composer.json Datei mit der folgenden JSON:

 "name": "Nettuts PHPCS Demo", "erfordern": "squizlabs / php_codesniffer": "*", "fabpot / php-cs-fixer": "*", "phpmd / phpmd": "*" 

Dadurch werden die drei Abhängigkeiten im aktuellen Ordner installiert. Öffnen Sie ein Terminalfenster für Ihren Installationsort und -typ Komponist installieren, und es werden die erforderlichen Pakete heruntergeladen.

Jetzt können Sie das Plugin in Sublime Text konfigurieren. Navigieren Sie zu "Einstellungen"> "Paketeinstellungen"> "PHP Code Sniffer"> "Einstellungen - Benutzer"..

Das Plugin muss wissen, wo sich die drei Abhängigkeiten befinden, sowie den Standard, an den sich unser Code halten soll:

 "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 "

Diese Einstellungen informieren PHPCS darüber, dass wir uns an den PSR2-Standard halten und den Pfad jeder Abhängigkeit angeben möchten. Vergiss nicht zu ersetzen DEPENDENCY_PATH mit deinem tatsächlichen Weg.

Starten Sie Sublime neu, und der Code-Sniffer scannt Ihren Code, wenn Sie Ihre PHP-Dateien speichern.

Wenn Sie mit der rechten Maustaste in den Editor klicken, werden auch einige neue Optionen aufgelistet, z. B. das Entfernen von Fehlermarken und der Versuch, die nicht standardmäßigen Probleme zu beheben. In diesem Artikel sollten Sie sich jedoch an den Standard gewöhnen. Ich empfehle Ihnen, den Code manuell zu korrigieren und die Automatik zu vermeiden Fixer Merkmal.


Fazit

Die PSR-Standards wurden so erstellt, dass Code problemlos von Projekt zu Projekt wiederverwendet werden kann, ohne die Konsistenz des Codestils zu beeinträchtigen. Sie mögen sich auf den ersten Blick überwältigend anfühlen, aber Sie können die Ideen und Werkzeuge aus diesem Artikel verwenden, um Ihnen den Übergang zu erleichtern.

Ein letztes Mal wiederholen: Niemand zwingt Sie, die Art und Weise zu ändern, die Sie in PHP programmieren. Es handelt sich lediglich um einen Leitfaden, der ursprünglich für die Interoperabilität von Frameworks gedacht war. Das heißt, bei Nettuts + halten wir es für eine Best Practice. Jetzt entscheiden Sie sich selbst! Wenn Sie Fragen haben, hören wir sie unten!