Dies ist eine Reihe von Sniffs für PHP CodeSniffer, die die PHP-Versionskompatibilität prüfen. Damit können Sie Ihren Code auf Kompatibilität mit höheren und niedrigeren PHP-Versionen analysieren.
testVersion
im Regelsatz versus BefehlszeileZiel des Projekts ist es, alle PHP-Kompatibilitätsänderungen abzudecken, die seit PHP 5.0 bis zur neuesten PHP-Version eingeführt wurden. Dies ist ein fortlaufender Prozess und die Abdeckung ist noch nicht 100 % (falls dies jemals der Fall sein könnte). Der Fortschritt wird auf unserem GitHub-Issue-Tracker verfolgt.
Pull-Requests, die auf Kompatibilitätsprobleme im PHP 4-Code prüfen – insbesondere zwischen PHP 4 und PHP 5.0 – sind sehr willkommen, da es immer noch Situationen gibt, in denen Menschen Hilfe bei der Aktualisierung älterer Systeme benötigen. Die Abdeckung der vor PHP 5.1 eingeführten Änderungen bleibt jedoch lückenhaft, da Sniffs hierfür derzeit nicht aktiv entwickelt werden.
Die Sniffs sind so konzipiert, dass sie die gleichen Ergebnisse liefern, unabhängig davon, welche PHP-Version Sie zum Ausführen von PHP CodeSniffer verwenden. Sie sollten unabhängig von der in Ihrer Testumgebung verwendeten PHP-Version konsistente Ergebnisse erhalten. Um die besten Ergebnisse zu erzielen, wird jedoch empfohlen, die Sniffs auf einer aktuellen PHP-Version in Kombination mit einer aktuellen PHP_CodeSniffer-Version auszuführen.
Ab Version 8.0.0 kann der PHPCompatibility-Standard auch mit PHP CodeSniffer 3.x verwendet werden. Ab Version 9.0.0 wurde die Unterstützung für PHP CodeSniffer 1.5.x und niedrigere 2.x-Versionen < 2.3.0 eingestellt. Ab Version 10.0.0 wurde die Unterstützung für PHP < 5.4 und PHP CodeSniffer < 3.10.0 eingestellt.
Vielen Dank an alle Mitwirkenden für ihre wertvollen Beiträge.
Vielen Dank an WP Engine für die Unterstützung bei den PHP 7.0-Sniffs.
Diese Bibliothek wurde neu organisiert. Alle Sniffs wurden in Kategorien eingeteilt und eine beträchtliche Anzahl von Sniffs wurde umbenannt.
Wenn Sie den vollständigen PHPCompatibility
Standard ohne exclude
-Direktiven in einem benutzerdefinierten Regelsatz verwenden und (noch) nicht die neue PHP_CodeSniffer-Annotation verwenden, wie sie in PHP_CodeSniffer 3.2.0 eingeführt wurde, hat dies keine spürbaren Auswirkungen und alles sollte wie zuvor funktionieren.
Wenn Sie jedoch exclude
für PHPCompatibility-Sniffs in einem benutzerdefinierten Regelsatz verwenden oder die Inline-Annotationen PHP_CodeSniffer im neuen Stil verwenden, müssen Sie diese beim Upgrade aktualisieren. Dies sollte eine einmalige Änderung sein. Das Changelog enthält detaillierte Informationen zu allen Sniff-Umbenennungen.
Bitte lesen Sie das Änderungsprotokoll für Version 9.0.0 sorgfältig durch, bevor Sie ein Upgrade durchführen.
require-dev
Ihrer Datei composer.json
hinzu. "require-dev" : {
"phpcompatibility/php-compatibility" : " * "
},
"prefer-stable" : true
Wenn PHPCompatibility der einzige externe PHP-CodeSniffer-Standard ist, den Sie verwenden, können Sie Folgendes zu Ihrer composer.json
Datei hinzufügen, um den erforderlichen Befehl automatisch auszuführen:
"scripts" : {
"post-install-cmd" : " " vendor/bin/phpcs " --config-set installed_paths vendor/phpcompatibility/php-compatibility " ,
"post-update-cmd" : " " vendor/bin/phpcs " --config-set installed_paths vendor/phpcompatibility/php-compatibility "
}
Alternativ – und dringend empfohlen, wenn Sie mehr als einen externen PHP-CodeSniffer-Standard verwenden – können Sie eines der folgenden Composer-Plugins verwenden, um dies für Sie zu erledigen.
Fügen Sie einfach das von Ihnen bevorzugte Composer-Plugin zum Abschnitt require-dev
Ihrer Datei composer.json
hinzu.
Als letzte Alternative für den Fall, dass Sie einen benutzerdefinierten Regelsatz verwenden, können Sie PHP CodeSniffer den Pfad zum PHPCompatibility-Standard mitteilen, indem Sie den folgenden Snippet zu Ihrem benutzerdefinierten Regelsatz hinzufügen:
< config name = " installed_paths " value = " vendor/phpcompatibility/php-compatibility " />
composer update --lock
aus, um sowohl PHP CodeSniffer, den PHPCompatibility-Codierungsstandard als auch – optional – das Composer-Plugin zu installieren../vendor/bin/phpcs -i
in der Befehlszeile ausführen. PHPCompatibility sollte als einer der verfügbaren Standards aufgeführt werden../vendor/bin/phpcs -p . --standard=PHPCompatibility
Installieren Sie PHP CodeSniffer mit Ihrer bevorzugten Methode.
PHP CodeSniffer bietet eine Vielzahl von Installationsmethoden, die zu Ihrem Arbeitsablauf passen: Composer, PEAR, eine Phar-Datei, gezippte/tarierte Release-Archive oder das Auschecken des Repositorys mit Git.
Profi-Tipp: Registrieren Sie den Pfad zu PHPCS in der Umgebungsvariablen $PATH
Ihres Systems, um den phpcs
-Befehl von überall in Ihrem Dateisystem verfügbar zu machen.
Laden Sie die neueste PHPCompatibility-Version herunter und entpacken/entpacken Sie sie in ein beliebiges Verzeichnis.
Sie können das Repository auch mit Git klonen, um Ihre Installation einfach und regelmäßig zu aktualisieren.
Fügen Sie den Pfad zu dem Verzeichnis, in dem Sie Ihre Kopie des PHPCompatibility-Repositorys abgelegt haben, zur PHP CodeSniffer-Konfiguration hinzu, indem Sie den folgenden Befehl in der Befehlszeile verwenden:
phpcs --config-set installed_paths /path/to/PHPCompatibility
Wenn Sie beispielsweise das PHPCompatibility
Repository im Verzeichnis /my/custom/standards/PHPCompatibility
abgelegt haben, müssen Sie dieses Verzeichnis zur PHP CodeSniffer-Konfigurationsvariable installed_paths
hinzufügen.
Warnung :installed_paths
überschreibt alle zuvor festgelegten installed_paths
. Wenn Sie zuvor installed_paths
für andere externe Standards festgelegt haben, führen Sie zuerst phpcs --config-show
aus und führen Sie dann den Befehl installed_paths
mit allen benötigten Pfaden durch Kommas getrennt aus, d. h.:
phpcs --config-set installed_paths /path/1,/path/2,/path/3
Profi-Tipp: Wenn Sie einen benutzerdefinierten Regelsatz verwenden, können Sie PHP CodeSniffer alternativ den Pfad zu den PHP-Kompatibilitätsstandards mitteilen, indem Sie Ihrem benutzerdefinierten Regelsatz das folgende Snippet hinzufügen:
< config name = " installed_paths " value = " /path/to/PHPCompatibility " />
Stellen Sie sicher, dass der PHPCompatibility-Standard korrekt registriert ist, indem Sie phpcs -i
in der Befehlszeile ausführen. PHPCompatibility sollte als einer der verfügbaren Standards aufgeführt werden.
Jetzt können Sie den folgenden Befehl verwenden, um Ihren Code zu überprüfen:
phpcs -p . --standard=PHPCompatibility
phpcs -p . --standard=PHPCompatibility
.testVersion
angeben, gegen die geprüft werden soll. Dies ermöglicht die Prüfung sowohl auf veraltete/entfernte PHP-Funktionen als auch auf die Erkennung von Code, der neue PHP-Funktionen verwendet.--runtime-set testVersion 5.5
zu Ihrem Befehlszeilenbefehl hinzufügen.--runtime-set testVersion 5.3-5.5
.--runtime-set testVersion 7.0-
um alle Prüfungen für PHP 7.0 und höher auszuführen.--report-full=path/to/report-file
. Weitere Informationen und andere Berichtsoptionen finden Sie im PHP CodeSniffer-Wiki.Ab Mitte 2018 ist ein begrenzter Satz Framework-/CMS-spezifischer Regelsätze verfügbar. Diese Regelsätze werden in ihren eigenen Repositorys gehostet.
PHPCompatibilityJoomla
GitHub | PaketistPHPCompatibilityWP
GitHub | PaketistSeit Herbst 2018 sind auch eine Reihe von PHP-Polyfill-spezifischen Regelsätzen verfügbar:
PHPCompatibilityPasswordCompat
GitHub | Packagist: Konten für die Polyfill-Bibliothek password_compat
von @ircmaxell.PHPCompatibilityParagonie
GitHub | Packagist: enthält zwei Regelsätze, die die Paragonie-Polyfill-Bibliotheken random_compat
und sodium_compat
berücksichtigen.PHPCompatibilitySymfony
GitHub | Packagist: enthält eine Reihe von Regelsätzen, die verschiedene vom Symfony-Projekt angebotene PHP-Polyfill-Bibliotheken berücksichtigen. Weitere Informationen zu den verfügbaren Regelsätzen finden Sie in der README-Datei des PHPCompatibilitySymfony-Repositorys. Wenn Sie sicherstellen möchten, dass Ihnen jederzeit alle PHPCompatibility-Regelsätze zur Verfügung stehen, können Sie das PHPCompatibilityAll
-Paket GitHub | verwenden Paketist.
WICHTIG: Framework-/CMS-/Polyfill-spezifische Regelsätze legen nicht die minimale PHP-Version für Ihr Projekt fest, daher müssen Sie dennoch eine testVersion
bestehen, um die genauesten Ergebnisse zu erhalten.
Wie bei jedem PHP CodeSniffer-Standard können Sie PHPCompatibility zu einem benutzerdefinierten PHP CodeSniffer-Regelsatz hinzufügen.
<? xml version = " 1.0 " ?>
< ruleset name = " Custom ruleset " >
< description >My rules for PHP CodeSniffer</ description >
<!-- Run against the PHPCompatibility ruleset -->
< rule ref = " PHPCompatibility " />
<!-- Run against a second ruleset -->
< rule ref = " PSR2 " />
</ ruleset >
Sie können die testVersion
auch innerhalb des Regelsatzes festlegen:
<!-- Check for cross-version support for PHP 5.6 and higher. -->
< config name = " testVersion " value = " 5.6- " />
Andere erweiterte Optionen, wie das Ändern des Nachrichtentyps oder des Schweregrads ausgewählter Sniffs, wie auf der Wiki-Seite PHPCS Annotated Ruleset beschrieben, werden natürlich ebenfalls unterstützt.
testVersion
im Regelsatz versus Befehlszeile In PHPCS 3.2.0 und niedriger konnte die testVersion
nach dem Festlegen im Regelsatz nicht mehr über die Befehlszeile außer Kraft gesetzt werden. Ab PHPCS 3.3.0 überschreibt eine über die Befehlszeile festgelegte testVersion
die testVersion
im Regelsatz.
Dies ermöglicht mehr Flexibilität, wenn Ihr Projekt beispielsweise mit PHP 5.5-
kompatibel sein muss, Sie aber über eine Bootstrap-Datei verfügen, die mit PHP 5.2-
kompatibel sein muss.
Derzeit gibt es zwei Sniffs, die über eine Eigenschaft verfügen, die über den Regelsatz festgelegt werden kann. Möglicherweise werden in Zukunft weitere benutzerdefinierte Eigenschaften verfügbar sein.
Der PHPCompatibility.Extensions.RemovedExtensions
-Sniff sucht nach entfernten Erweiterungen basierend auf dem für diese Erweiterungen verwendeten Funktionspräfix. Dies könnte mit Userland-Funktionen kollidieren, die dasselbe Funktionspräfix verwenden.
Um Userland-Funktionen auf die Whitelist zu setzen, können Sie eine durch Kommas getrennte Liste von Funktionsnamen an den Sniff übergeben.
<!-- Whitelist the mysql_to_rfc3339() and mysql_another_function() functions. -->
< rule ref = " PHPCompatibility.Extensions.RemovedExtensions " >
< properties >
< property name = " functionWhitelist " type = " array " value = " mysql_to_rfc3339,mysql_another_function " />
</ properties >
</ rule >
Der PHPCompatibility.Interfaces.RemovedSerializable
-Sniff muss alle Schnittstellen kennen, die die Serializable
Schnittstelle erweitern, um die zuverlässigsten Ergebnisse zu liefern. Der Sniff warnt, wenn er auf eine Schnittstelle trifft, die die Serializable
-Schnittstelle erweitert, die dem Sniff unbekannt ist, und empfiehlt, den Schnittstellennamen zur Eigenschaft hinzuzufügen.
Um den Sniff über zusätzliche Schnittstellen zu informieren, die die Serializable-Schnittstelle bereitstellen, fügen Sie Ihrem benutzerdefinierten Regelsatz ein Snippet in der Art des folgenden hinzu:
< rule ref = " PHPCompatibility.Interfaces.RemovedSerializable " >
< properties >
< property name = " serializableInterfaces " type = " array " >
< element value = " MyCustomSerializableInterface " />
< element value = " AnotherSerializableInterface " />
</ property >
</ properties >
</ rule >
Es gibt Hunderte öffentlicher Projekte, die PHPCompatibility nutzen oder darauf aufbauen. Eine kurze Liste einiger, die Sie vielleicht kennen oder die Sie sich ansehen könnten:
Beiträge sind herzlich willkommen. Bitte lesen Sie zunächst die CONTRIBUTING-Dokumentation.
Dieser Code wird unter der GNU Lesser General Public License (LGPL) veröffentlicht. Weitere Informationen finden Sie unter http://www.gnu.org/copyleft/lesser.html