Beim Arbeiten an WordPress-Projekten mit PHP 8.x kann die folgende Fehlermeldung auftreten:
Schwerwiegender Fehler: Uncaught PHP_CodeSnifferExceptionsRuntimeException: 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 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 diese Standards aufgrund von Änderungen im Verhalten von PHP nicht einhält.
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 die 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 nur weil Sie dies tun können, heißt das nicht, dass Sie es tun sollten.
Während der vorherige Ansatz den Fehler 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 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 Patchdatei 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 Abhängigkeiten installiert oder aktualisiert werden.
Um Patches über Composer anzuwenden, benötigen Sie das Composer-Patches-Plugin. Führen Sie zur Installation den folgenden Befehl aus:
Komponisten benötigen 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 alle Composer-Updates hinweg bestehen bleiben und befolgen dabei die Best Practices in der Softwareentwicklung. Ü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!
Das obige ist der detaillierte Inhalt vonBehebung von PHP_CodeSniffer Null Trim()-Fehlern in WordPress-Codierungsstandards. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!