Beim Arbeiten an WordPress-Projekten mit PHP 8.x kann der folgende Fehler auftreten:
Schwerwiegender Fehler: Uncaught PHP_CodeSniffer\Exceptions\RuntimeException: trim(): Die Übergabe von Null an Parameter Nr. 1 ($string) vom Typ string ist in /path/... veraltet.
Dieser Fehler tritt aufgrund einer veralteten Warnung in PHP 8.x auf, bei der die Übergabe von Null an die Funktion trim() nicht mehr zulässig ist. Dieses Problem tritt insbesondere im Rahmen eines WordPress Coding Standards (WPCS)-Sniffs auf, der Teil des PHP_CodeSniffer-Setups ist. Zum Zeitpunkt der Erstellung dieses Artikels besteht dieses Problem weiterhin, selbst mit den neuesten Versionen von PHP_CodeSniffer und WordPress Coding Standards.
PHP_CodeSniffer ist ein Tool, das Entwicklern dabei hilft, Codierungsstandards einzuhalten, indem es ihren PHP-Code auf Verstöße gegen bestimmte Regeln überprüft. WordPress Coding Standards (WPCS) bieten eine Reihe von Richtlinien zum Schreiben von konsistentem und sauberem Code in WordPress-Projekten. Der oben erwähnte Fehler weist typischerweise darauf hin, dass ein Codeausschnitt aufgrund von Änderungen im Verhalten von PHP nicht diesen Standards entspricht.
Um dies zu beheben, können wir die Datei, die das Problem verursacht, manuell ändern, die Zeile suchen, in der trim() aufgerufen wird, und den Code aktualisieren, um sicherzustellen, dass Nullwerte beim Aufruf von trim() ordnungsgemäß behandelt werden.
Suchen Sie beispielsweise in der Datei vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php Zeile 280 und ersetzen Sie die folgende Zeile:
// this $cl_prefixes = trim( PHPCSHelper::get_config_data( 'prefixes' ); // to this $cl_prefixes = is_null( PHPCSHelper::get_config_data( 'prefixes' ) ) ? '' : trim( PHPCSHelper::get_config_data( 'prefixes' ) );
Aber wie bei vielen Entscheidungen in der Softwareentwicklung gilt: Nur weil Sie dies tun können, heißt das nicht, dass Sie es tun sollten.
Während der vorherige Ansatz den Fehler möglicherweise beheben kann, ist es wichtig, sich daran zu erinnern, dass das Ändern von Herstellerdateien keine nachhaltige Lösung ist. Änderungen gehen jedes Mal verloren, wenn Sie Ihre Abhängigkeiten über Composer aktualisieren.
Ein besserer Ansatz besteht dann darin, eine Patch-Datei zu erstellen.
Hier finden Sie eine Schritt-für-Schritt-Anleitung zum Erstellen und Anwenden eines Patches für das Problem
Eine robustere Lösung besteht darin, eine Patch-Datei zu erstellen. Mit dieser Methode können Sie Ihre Änderungen jedes Mal automatisch anwenden, wenn Sie Ihre Abhängigkeiten installieren oder aktualisieren.
Eine Patchdatei ist eine Textdatei, die die Unterschiede zwischen zwei Versionen einer Datei enthält – im Wesentlichen ein „Vorher“- und „Nachher“-Schnappschuss.
Erstellen Sie in Ihrem Projektverzeichnis einen Ordner für die Patchdatei:
mkdir -p Patches
Erstellen Sie im Ordner „patches/“ eine neue Patch-Datei mit dem Namen „fix-null-trim.patch“. Sie können dies mit Ihrem Texteditor tun:
touch patches/fix-null-trim.patch
Öffnen Sie „fix-null-trim.patch“ in Ihrem Texteditor und fügen Sie den folgenden Inhalt hinzu:
--- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/NamingConventions/PrefixAllGlobalsSniff.php @@ -280,7 280,7 @@ // Original code with `trim()` // Update this line: - $cl_prefixes = trim( PHPCSHelper::get_config_data( 'prefixes' ) ); $cl_prefixes = is_null( PHPCSHelper::get_config_data( 'prefixes' ) ) ? '' : trim( PHPCSHelper::get_config_data( 'prefixes' ) ); --- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/WP/I18nSniff.php @@ -194,7 194,7 @@ // Original code with `trim()` // Update this line: - $cl_text_domain = trim( PHPCSHelper::get_config_data( 'text_domain' ) ); $cl_text_domain = is_null(PHPCSHelper::get_config_data( 'text_domain' )) ? '' : trim( PHPCSHelper::get_config_data( 'text_domain' ) ); --- a/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php b/vendor/wp-coding-standards/wpcs/WordPress/Sniffs/Sniff.php @@ -1144,7 1144,7 @@ // Original code with `trim()` // Update this line: - $cl_supported_version = trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) ); $cl_supported_version = is_null(PHPCSHelper::get_config_data( 'minimum_supported_wp_version' )) ? '' : trim( PHPCSHelper::get_config_data( 'minimum_supported_wp_version' ) );
Dieser Patch weist Composer an, die problematische Zeile in PrefixAllGlobalsSniff.php durch eine sicherere Version zu ersetzen, die den Null-Koaleszenzoperator (??) verwendet, um die Übergabe von Null an trim() zu vermeiden.
Als nächstes müssen Sie Composer anweisen, diesen Patch automatisch anzuwenden, wenn Sie Ihre Abhängigkeiten installieren oder aktualisieren.
Öffnen Sie die Datei „composer.json“ Ihres Projekts. Fügen Sie im Abschnitt „Extra“ die folgende Konfiguration hinzu. Wenn der Abschnitt „Extra“ noch nicht vorhanden ist, müssen Sie ihn erstellen.
json "extra": { "patches": { "wp-coding-standards/wpcs": { "Fix null trim() issue": "patches/fix-null-trim.patch" } } }
Dadurch wird Composer angewiesen, die Datei „fix-null-trim.patch“ auf das Paket „wp-coding-standards/wpcs“ anzuwenden, wenn es Abhängigkeiten installiert oder aktualisiert.
Um Patches über Composer anzuwenden, benötigen Sie das Composer-Patches-Plugin. Führen Sie zur Installation den folgenden Befehl aus:
Composer benötigt Cweagans/Composer-Patches
Jetzt können Sie den Patch anwenden, indem Sie den folgenden Befehl ausführen:
Composer-Installation
Während der Installation wendet Composer den Patch aus dem Ordner „patches/“ auf die Datei „PrefixAllGlobalsSniff.php“ an.
Durch das Erstellen und Anwenden einer Patchdatei stellen Sie sicher, dass Ihre Korrekturen über Composer-Updates hinweg bestehen bleiben und dabei die Best Practices in der Softwareentwicklung einhalten. Überwachen Sie regelmäßig Aktualisierungen von PHP_CodeSniffer und WordPress Coding Standards, da diese Probleme möglicherweise in zukünftigen Versionen behoben werden. Dieser proaktive Ansatz verbessert nicht nur die Codequalität, sondern verbessert auch Ihren Entwicklungsworkflow in PHP 8.x-Umgebungen. Ich habe die Patch-Datei in diesem Gist geteilt. Sie können es gerne als Referenz verwenden, um ähnliche Korrekturen in Ihren Projekten zu implementieren!
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3