WordPress & PHP 8 – Kompatibilität & Vorteile!

Veröffentlicht: 2021-01-04

Die meisten Technikfreaks sind von PHP 8.0 begeistert, und sicherlich sind die Änderungen dieses Mal enorm. Jeder wird einige Zeit aufwenden, um die Kompatibilität, Konfigurationen, Vorteile usw. von PHP 8 zu verstehen, und unter allen stellt sich eine der größten Fragen: „Ist WordPress bereits mit PHP 8 kompatibel, und wenn nicht, dann welche Maßnahmen erforderlich sind.“

WordPress & PHP 8 - Kompatibilität & Vorteile!

Nun, sobald PHP 8 veröffentlicht wurde, tauchte unsere Expertenzeit in die tiefste Testebene ein, und das Ergebnis kann jeden schockieren! Ja, wir wissen jetzt alles und freuen uns, unsere Berichte und Ergebnisse der Verkostungen zur Schau zu stellen.

Wir zeigen nicht nur, was sich alles geändert hat, sondern geben Ihnen auch einen reinen Rat, ob Sie auf PHP 8 aktualisieren sollten oder nicht.

So viele Breaking Changes in PHP 8: Aber warum?

PHP 8 ist ein riesiges Update von PHP, und es ist üblich, Negative in Hauptversionen aus der jüngsten Reihe von Nebenversionen zu entfernen. Für das viel diskutierte PHP 8 wurden in den vorherigen 7.*-Versionen mehrere Breaking Changes reduziert.

Daher sollte es für Projekte, die im Laufe der Jahre aufmerksam aktualisiert wurden, um ihre abweichenden APIs zu reparieren, überhaupt nicht schwierig sein, ein Upgrade durchzuführen. Um die Wahrheit zu sagen, haben PHP 7.*-Versionen im Gegensatz zu früheren PHP-Versionen eine weitaus größere Anzahl von Verwerfungen beobachtet.

Wir würden sagen, PHP 5.6 zu PHP 7 war eine ziemlich einfache Migration, aber der Wechsel von 7.x zu 8 könnte etwas schmerzhaft sein, insbesondere für die alten Codebasen, einschließlich WordPress, neben mehreren verfügbaren Plugins.

Bei gut typisierten Codebasen oder aktuellen Codebasen mit den neuesten PHP-Versionen treten sicherlich keine großen Probleme auf. Die Realität ist jedoch, dass WordPress keine solche Codebasis ist.

Ist WordPress bereits mit PHP 8 kompatibel?

Ehrlich gesagt, vielleicht ist WordPress bereits mit PHP 8 kompatibel, aber diese Worte zu versiegeln ist jedoch nicht möglich. WordPress zielt darauf ab, immer mit den neuesten Versionen von PHP kompatibel zu sein . Wir haben die größten Bedenken jedoch später in diesem Leitfaden eingehend analysiert.

Wordpress-und-PHP-Kompatibilität2

Wir haben großartige Arbeit geleistet, um die perfekten Lösungen für die meisten Kompatibilitätsprobleme zu finden, die mit den verfügbaren Strategien gefunden werden konnten. Wir werden sicherlich tiefer in das eintauchen, was alles da war und welche Probleme damit bestehen.

Welche Leistungsänderungen kommen?

Die wichtigste potenziell aufregende Funktion, die mit PHP 8 eingeführt wird, ist die JIT-Kompilierung (Just In Time) und das Debugging. Wie wir wissen, ist PHP eine interpretierte Sprache, was bedeutet, dass sie bei der Ausführung in Maschinencode übersetzt wird.

JIT verfolgt häufig verwendeten Code und arbeitet an der Optimierung der maschinellen Codeübersetzung, um ihn wiederverwendbar zu machen. Dies kann nun zu einer enormen Leistungsverbesserung für eine bestimmte Funktionalität führen.

Die Einbeziehung von JIT in verschiedene Sprachen, beispielsweise JavaScript, hat in der Vergangenheit zu einer Explosion neuer Anwendungen geführt. Zum Beispiel wären virtuelle Maschinen, die in JS laufen, in den frühen Tagen des Webs völlig unvorstellbar gewesen. Einige Aufgaben, die früher die Installation von Modulen auf dem Server erfordert hätten, werden durch die Verwendung von Core-PHP-Bibliotheken praktikabel.

Derzeit ist die tatsächliche Leistungssteigerung für Web-Apps wie WordPress minimal. Abgesehen davon wird es sehr lange dauern, bis ein Entwickler oder ein durchschnittlicher WordPress-Benutzer die Vorteile dieser neuen Funktion nutzen kann.

Es gibt mehrere andere neue Funktionen, die das Leben der Entwickler erleichtern; Es ist unwahrscheinlich, dass diese auf absehbare Zeit in WP-Designs und Plugins verwendet werden, da die meisten die Kompatibilität mit den früheren PHP-Versionen beeinträchtigen würden, die noch von mehreren WordPress-Sites verwendet werden.

Wie aktualisiere ich PHP für deine WordPress-Seite?

In diesem Leitfaden beschreiben wir, wie bequem Sie PHP auf die neueste Version aktualisieren können, vor allem, ohne Ihre WordPress-Site zu beschädigen.

Wenn Sie den Pfad wissen möchten, überprüfen Sie einfach Ihre aktuelle PHP-Version und aktualisieren Sie dann WordPress auf die neueste Version. Installieren Sie danach den „one.com PHP-Scanner“ und führen Sie einen Scan durch, um potenzielle Probleme zu beheben. Aktualisieren Sie außerdem PHP auf die neueste Version und überprüfen Sie, ob Ihre Website wie erwartet funktioniert oder nicht.

Lassen Sie uns den gesamten Prozess zeigen.

Schritt 1: Überprüfen Sie Ihre aktuelle PHP-Version

Ganz am Anfang müssen Sie prüfen, mit welcher PHP-Version Sie gerade unterwegs sind. Informationen zur aktuellen PHP-Version Ihrer Website erhalten Sie auf der phpinfo-Seite.

Wenn Sie das cPanel verwenden, können Sie die PHP-Version im Artikel zum Anzeigen und Ändern der PHP-Version in cPanel anzeigen.

Falls Sie die PHP-Version 7.3 oder höher verwenden, ist alles in Ordnung. Für diejenigen, die PHP 7.2 haben, ist ein Update erforderlich. Bitte beachten Sie Schritt 2.

Schritt 2: Aktualisieren Sie WordPress auf die neueste Version

Stellen Sie sicher, dass der WordPress-Kern und alle Plugins und Themes auf die neueste Version aktualisiert werden, wenn Sie wirklich Fehlfunktionen vermeiden möchten.

  1. Melden Sie sich bei Ihrem WordPress-Admin an und klicken Sie auf Dashboard > Updates .
  2. Überprüfen Sie, ob Sie die neueste Version von WordPress installiert haben und ob alle Themes und Plugins auf dem neuesten Stand sind. Aktualisieren Sie jetzt Ihr WordPress auf die neueste Version.

Schritt 3: Installieren Sie den „one.com PHP-Scanner“.

  1. Tippen Sie in Ihrem WordPress -Adminbereich auf one.com > Plugins .
  2. Suchen Sie den PHP-Scanner von one.com und tippen Sie auf Jetzt installieren .
  3. Klicken Sie nun auf Aktivieren und fahren Sie mit dem nächsten Schritt fort.

Schritt 4: Führen Sie einen Scan durch und beheben Sie potenzielle Probleme

  1. Tippen Sie im Menü links auf PHP-Scanner .
  2. Tippen Sie auf PHP Version 7.4 , dann auf „ Alle Themes und Plugins “ und dann auf Scan starten .
  3. Sie können fortfahren, sobald der Scan abgeschlossen ist.
  4. Sie können drei Ergebnisse haben:

Kompatibel = Es bedeutet, dass alles gut ist!

Warnung = Es bedeutet, dass es funktionieren sollte, aber Probleme mit der kommenden PHP-Version geben könnte.

Fehler = Es ist nicht so gut, wird nach dem Update sicherlich Probleme verursachen.

Beheben Sie alle Themen oder Plugins, die Fehler lesen, indem Sie sie entweder auf die neueste Version aktualisieren oder sie durch ein alternatives Plugin ersetzen, das die gleiche Funktionalität bietet.

Tipp: Wir empfehlen Ihnen, nur solche Plugins zu verwenden, die regelmäßig aktualisiert werden und keine Kompatibilitätsprobleme mit der neuesten Version von WordPress mit sich bringen. Abgesehen davon ist es eine gute Praxis, alle unerwünschten Plugins zu entfernen, um die Leistung der Website zu verbessern.

Schritt 5: Aktualisieren Sie PHP auf Version 8.0

Sie sind jetzt bereit, PHP zu aktualisieren. Wir empfehlen, PHP-Fehlermeldungen gleichzeitig einzuschalten. Falls es ein Problem mit dem Code gibt, sehen Sie Fehlermeldungen, die Ihnen sagen, was es verursacht und wo genau es sich befindet.

  1. Kehren Sie in der Systemsteuerung zu den PHP- und Datenbankeinstellungen zurück .
  2. Scrollen Sie nach unten zu PHP-Fehlermeldungen .
  3. Klicken Sie auf Aktualisieren , nachdem Sie die Fehlermeldungen auf Ein gesetzt haben .
  4. Ändern Sie direkt darunter die Version und tippen Sie auf Aktualisieren .

Schritt 6: Überprüfen Sie, ob Ihre Website wie erwartet funktioniert.

Jetzt haben Sie die PHP-Version aktualisiert und es dauert mindestens 20 Minuten , bis die Änderungen wirksam werden. Wenn Ihre Website viele Besucher hat, kann sich der Zeitrahmen sogar auf mehrere Stunden erstrecken. Aus diesem Grund empfehlen wir, Ihre Website in den kommenden 24 Stunden mindestens ein paar Mal zu überprüfen.

Falls Ihre Website nicht wie erwartet funktioniert, ist das wahrscheinlichste Problem Ihr Design oder ein Plugin. So finden Sie heraus, was genau die Probleme verursacht:

  1. Wechseln Sie vorübergehend zum Standard-WordPress-Theme, wir würden „Twenty Seventeen“ sagen.
  2. Wählen Sie alle installierten Plugins aus und deaktivieren Sie diese vollständig.
  3. Aktivieren Sie Themes und alle Plugins wieder nacheinander und überprüfen Sie jedes Mal, ob Ihre Website noch funktioniert oder nicht. So können Sie den Übeltäter fassen.

Wenn wir technisch sprechen, dann ist die Kompatibilität der heutigen Nacht von WordPress mit dem viel diskutierten PHP 8 auf einem ähnlichen Niveau, wie wir es von WordPress-Veröffentlichungen gewohnt sind, kurz bevor eine neue Version von PHP auftaucht.

Unsere Tests waren so umfassend, die Fehlerbehebung war so akribisch und das Niveau der Problembehebungen war so groß wie jede Behebung der PHP-Kompatibilität im WordPress-Kern. Wenn Sie diese Anleitung jedoch nicht befolgen, werden Sie die Kompatibilitätsherausforderungen nicht verstehen und den maximalen Nutzen aus PHP 8 ziehen können.

Die große Menge an Breaking Changes und die Art von Änderungen, die in PHP 8 enthalten sind, neben ein paar zusätzlichen Komplexitäten in Cross-Version-Tools, machen diese Kompatibilitätsherausforderung sicherlich zu einem größeren Monster als das, was wir zuvor mit den vorherigen Versionen von PHP erlebt haben. Dieser Bericht zielt darauf ab, denselben Fall zu erklären.

Kompatibilitätsprobleme mit WordPress und PHP8

Wir zeigen Ihnen einige Strategien, die Sie einsetzen können, um eine vorhandene Codebasis mit PHP 8 kompatibel zu machen.

  • Statische Analysetools wie PHPCompatibility zur Erkennung syntaktischer Probleme.
  • Automatisierte Tests zur Erkennung von Laufzeitproblemen.
  • Manuelle Tests zur Erkennung von Laufzeitproblemen.

Abhängig von der Abdeckung Ihrer Testsuite und dem Anteil an syntaktischen Änderungen und der Laufzeit dienen diese Strategien gut dazu, die Kompatibilität der Codebasis mit einer neuen Version von PHP (derzeit wird PHP 8 diskutiert) zu beheben.

Tatsächlich gibt es im Fall von PHP 8 und WordPress einige zusätzliche Herausforderungen, die es schwierig machen, sich auf diese Strategien zu verlassen, um eine perfekte Kompatibilität von WordPress mit PHP 8 zu gewährleisten. Im Folgenden berichten wir über Strategien, die wir eingesetzt haben für WordPress und teilen Sie die Ergebnisse.

Statische Analysewerkzeuge

Aufgrund der Art einiger Änderungen in PHP 8.0 sind die Probleme, die mit statischer Analyse erkannt werden können, begrenzt. Unter solchen Umständen, in denen die statische Analyse versucht, über ihre traditionellen Möglichkeiten hinauszugehen und den Wert von Variablen und Konstanten sowie den Laufzeittyp zu verfolgen, werden die Ergebnisse solcher Scans sicherlich anfällig für Fehlalarme sein.

Statische-Analyse-Tools

Abgesehen davon ist die PHP-Kompatibilität das einzige statische Analysetool, das Probleme mit der PHP-Versionsübergreifenden Kompatibilität finden soll.

Neben der PHP-Kompatibilität berichten andere statische Analysetools über eine größere Bandbreite von Problemen. Die Ergebnisse zu schätzen, um die Probleme zu erkennen, die mit der PHP-Versionsübergreifenden Kompatibilität zusammenhängen und tatsächlich korrekt sind, ist ziemlich zeitaufwändig und erfordert fundiertes Tool-bezogenes Wissen, insbesondere über die Konfiguration für das geringste Rauschen.

Gleichzeitig befinden sich diese Tools in ständiger Instabilität und versuchen, mit den Änderungen in der PHP-Version fortzufahren und die möglichen Scans zu aktualisieren. Daher können wir davon ausgehen, dass diese Tools in naher Zukunft noch mehr Probleme erkennen werden.

Unabhängig davon, was zu diesem Zeitpunkt bereits gefunden wurde und weiter gefunden werden kann, stehen die Chancen gut, dass diese Tools in der (nahen) Zukunft noch mehr Probleme finden werden.

Scannen von WordPress mit PHPCompatibility

„__destruct() wird nicht mehr nach die() in __construct() aufgerufen“ ist ein weiteres PHP 8-Problem, das von PHPCompatibility gefunden wurde. Dies wird vom Scanner perfekt erkannt. Nach weiterer Analyse hat sich jedoch herausgestellt, dass dies in diesem Fall nicht problematisch ist.

Außerdem hat PHPCompatibility ein Problem im Code festgestellt, der vom „Plugin/Theme Editor“ verwendet wird. Die Analysen des beteiligten Codes haben das Vorhandensein eines zugrunde liegenden Versehens im Code festgestellt. Im Editor freut sich WordPress auf eine minimale Analyse des Codes; PHP 5.3+-Code wird jedoch nicht berücksichtigt.

Unter Berücksichtigung relevanter Änderungen in PHP8 soll dieses Versehen nun komplexer zu lösen sein. Wir haben mit der entwickelten Version Scans mit PHPCompatibility durchgeführt, und die Ergebnisse waren erwartungsgemäß sehr unterschiedlich zu denen, die wir mit den vorherigen PHP-Updates erhalten haben. Vom Scanner erkannte Probleme werden extern gepflegt.

Scannen von WordPress mit Exakat

In Bezug auf den letzten öffentlichen Scan, der am 16. Oktober basierend auf dem WP-Trunk stattfand, meldet Exakat insgesamt 149.567 Probleme.

Der PHP 8-Kompatibilitätsbericht zeigt uns insgesamt 93 Probleme. Es ist jedoch unvollständig, da für PHP 8 relevante Analysezahlen nicht im Bericht enthalten sind.

Obwohl wir davon ausgehen, dass diese Berichte eine große Anzahl falsch positiver Ergebnisse enthalten, da WordPress keine Typdeklarationen verwendet und die Typen daher aus dem gefundenen Code und den in Docblocks angezeigten Typen extrapoliert werden, sollten diese Probleme dennoch einzeln untersucht werden.

Egal, nur 1% der gefundenen Probleme sind richtig, was immer noch auf ~450 Fehler zurückgehen würde, die noch behandelt werden müssen. Abgesehen davon, der große Zeitaufwand, der erforderlich ist, um die authentischen Probleme von den Fehlalarmen auszusortieren.

Scannen von WordPress mit PHPStan

Scans mit PHPStan erfordern einen vollständig angepassten Regelsatz, um aus der Ferne verwendbare Ergebnisse zu erzielen, und dennoch erweisen sie sich als mit einigen Fehlalarmen durchsetzt, was die Ausgabe unbrauchbar macht.

Hinweis: Wir kritisieren das PHPStan-Tooling nicht, aber das liegt vor allem daran, dass WordPress kaum Typdeklarationen verwendet, während PHPStan andererseits hauptsächlich zu Projekten mit modernem Code neigt, oder?

Ein anfänglicher Scan mit den einfachsten Konfigurationen ergibt über 20.000 Probleme. Ein Scan mit dem hochgradig angepassten oben genannten Regelsatz, der speziell auf Probleme im Zusammenhang mit PHP 8 ausgerichtet ist, ergibt immer noch genau 580 Probleme auf Ebene 5 und zusätzliche 2.150 potenzielle Probleme auf Ebene 7. Diese werden wahrscheinlich ein paar Fehlalarme enthalten und dennoch 380 Probleme mehr ergeben auf Stufe 8 mit einer ähnlichen Einschränkung.

Kürzlich wurde ein Trac-Ticket eröffnet, um eine Liste von Problemen auf der Grundlage einer unbekannten Konfiguration zu beheben, die jedoch vollständig auf nicht übereinstimmende Parametertypen abzielte (Stufe 5). Zur Behebung dieser Probleme steht ein PR-Entwurf zur Verfügung.

Eine anfängliche Bewertung dieser PR zeigt, dass die meisten der vorgeschlagenen Korrekturen Variablen in den erwarteten Typ umwandeln und Probleme verbergen würden, anstatt sie tatsächlich durch eine ordnungsgemäße Überprüfung zu beheben. Dies führt zu unerwartetem Verhalten in der Anwendung, falls diese Änderungen nicht von strengen Einheitentests begleitet werden. Abgesehen davon führt Tit wahrscheinlich zu zunehmenden Schwierigkeiten beim Debuggen von Fehlern im weiteren Verlauf der Linie.

Derzeit ist nicht bestätigt, ob die vorgeschlagenen Korrekturen gerechtfertigt sind oder ob die identifizierten Probleme als falsch positive Ergebnisse betrachtet werden sollten.

Testen

Die statische Analyse kann aufgrund der Natur der problematischen Swaps in PHP8 nur so weit gehen. Das manuelle Überprüfen und Testen von Software erweist sich als sehr mühsame Arbeit, und Menschen neigen auch dazu, Dinge zu übersehen, wenn es viel zu beachten gibt.

Wenn wir nun über Tests sprechen, die von Endbenutzern durchgeführt werden, erweisen sie sich als relativ nutzlos, da dies normalerweise dazu führt, dass „glückliche Pfade“ getestet werden. Wenn wir verlässlichere Ergebnisse erzielen wollen, brauchen wir umfassende explorative und Regressionstests.

Testen

Es ist wichtiger als alles andere, qualitativ hochwertige automatisierte Tests zu haben und diese auf PHP 8 auszuführen. Dies bietet den perfekten Hinweis auf das zu erwartende PHP 8.0-Problem.

Die meisten Technikfreaks sind von PHP 8.0 begeistert, und sicherlich sind die Änderungen dieses Mal enorm. Jeder wird einige Zeit aufwenden, um die Kompatibilität, Konfigurationen, Vorteile usw. von PHP 8 zu verstehen, und unter allen stellt sich eine der größten Fragen: „Ist WordPress bereits mit PHP 8 kompatibel, und wenn nicht, welche Aktionen dann? wird gebraucht."

Nun, sobald PHP 8 veröffentlicht wurde, tauchte unsere Expertenzeit in die tiefsten Tests ein, und das Ergebnis kann jeden schockieren! Ja, wir wissen jetzt alles und freuen uns, unsere Berichte und Ergebnisse der Tests zur Schau zu stellen.

Fahren wir mit dem Ausführen automatisierter Tests auf PHP 8 jetzt fort.

Ausführen automatisierter Tests auf PHP 8

PHPUnit 9.3 ist die erste PHPUnit-Version, die offiziell mit PHP 8.0 kompatibel ist, und sie wurde im August 2020 veröffentlicht. Nun, das Ausführen einer automatisierten Testsuite, die auf PHP läuft, ist schwierig, da es sich de facto um ein Tool für Unit-Tests handelt.

ablaufautomatisiert

Eine automatisierte Testsuite auf PHP 8 laufen zu lassen, führt uns in das nächste Kaninchenloch als De-facto-Tool zur Durchführung des Unit-Tests in der PHP-Welt; PHPUnit bringt normalerweise jedes Jahr eine große Veröffentlichung heraus, wobei jede einzelne größere Veröffentlichung frühere PHP-Versionen unterstützt. Es führt bahnbrechende Änderungen ein, aber da PHPUnit 9.3 offiziell mit PHP 8.0 kompatibel ist, wie wir oben erwähnt haben, besteht kein Grund zur Sorge!

Wir wissen, dass WordPress zumindest noch PHP 5.6 unterstützt. Um Tests auf PHP 8.0 auszuführen, muss jede Testsuite im Zusammenhang mit WordPress vollständig mit PHPUnit 5 bis PHPUnit 9 kompatibel sein. Sicherlich wurden Tools entwickelt, um Ihnen dabei zu helfen; Es kostet immer noch Mühe und Zeit, diese Tools zu implementieren, um eine Testsuite kompatibel zu machen.

Die Tests auf PHP8 für WordPress Core zum Laufen bringen

Die Tests für WP Core bestehen derzeit und laufen gegen PHP 8. Diese Tests werden auf der installierten Composer-Version von PHPUnit 7.5 durchgeführt. Obwohl PHPUnit 9.3 die älteste PHPUnit-Version ist, die offiziell mit PHP 8 kompatibel ist.

Dieses letzte Problem wurde angegangen, indem eine ausgewählte Anzahl von Dateien/Klassen von PHPUnit 9.3 in die WordPress-Testsuite kopiert wurde, wobei die nativen Klassen von PHPUnit aus der Composer-Autoload-Generation ausgeschlossen wurden, wodurch die Verwendung von Kopien von PHPUnit 9.3 in der WordPress-Testsuite unterstützt wurde. Das funktioniert vorerst, aber wir würden es eine Hacky-Lösung nennen, und es ist möglicherweise in der Zukunft nicht nachhaltig, abgesehen von der Wartung, die es möglicherweise derzeit benötigt.

Aus Gründen der Testqualität war dies zu Beginn sicherlich niedrig, da in den meisten Fällen lose Typprüfungen verwendet wurden.

Um dies zu vertiefen, wurde bereits 2016 ein Trac-Ticket eröffnet, um dies zu beheben. In Anbetracht der strengeren Einhaltung von Typen in PHP wurde dieses Ticket wiederhergestellt. Es wurde viel unternommen, um dies zu mildern.

Während wir geschrieben haben, gibt es ungefähr 800 Instanzen (676 assertEquals() hinzugefügt zu 96 assertNotEquals()). Es wird immer noch lose Typprüfung verwendet – weniger als 8000+ Instanzen.

Zum Teil sind die verbliebenen lockeren Behauptungen legitim, wenn Objekte verglichen werden; zum Teil müssen diese sicherlich angegangen werden. Allerdings würde es derzeit zu Testausfällen führen. Letztere unterstreichen Mängel entweder in den Tests, gelegentlich jedoch im getesteten Code.

Testen von Themes und Plugins

Es gibt nur einen kleinen Prozentsatz der verfügbaren Plugins, die professionell entwickelten und beliebter sind und über automatisierte Tests verfügen. Im Allgemeinen ist dies besorgniserregend, da auf einer normalen WordPress-Site mit Sicherheit fast 19 oder 20 Plugins ausgeführt werden. Nicht wenige Websites rollen mit noch mehr Plugins auf! Automatisierte Tests für Themes sind noch seltener.

Es ist eine Herausforderung, diese Testsuiten auf PHP Version 8 laufen zu lassen. Und auch, bevor Erkenntnisse über die Kompatibilität von Plugins und Themes mit PHP 8 gewonnen werden können.

Die Plugins/Themes, die es haben, sind jedoch meistens diejenigen, bei denen die minimale Menge an PHP 8.0-Problemen zu erwarten ist. Wir rufen dies aus, weil solche Themen/Plugins ein professionelles Entwicklungsmodell verwenden.

Der größere Grund zur Sorge ist die Vielzahl von Tests und Themen ohne Tests, da diese bei der Ausführung mit PHP 8 anfälliger für Probleme sind.

Für Themes und Plugins, die Tests haben , gibt es hauptsächlich zwei Arten von Tests, die sie möglicherweise haben oder nicht:

  • Unit-Tests . Eigenständige Tests, die WP „verspotten“, um das Testen des Plugin-Codes zu ermöglichen. Dabei kommen beliebte Frameworks wie BrainMonkey und Mockery zum Einsatz.
  • Integrationstests . Jetzt laden Integrationstests WordPress selbst, bevor wir die Testsuite ausführen, und es wird den WPcore-Code verwenden und sich in die WP-Testsuite integrieren.

Integrationstests

Wir wissen, dass sich WordPress entschieden hat, bei PHPUnit 7.5 zu bleiben. Was bedeutet das?

Nun, für Integrationstests für Themes und Plugins werden diese ebenfalls auf PHPUnit 7.5 (maximal) gesprungen.

Themes und Plugins müssen entweder den Hack in WP Core kopieren, um ihre Integrationstests perfekt zum Laufen zu bringen, oder sie müssen alternativ die Dateien in WP Core verwenden. Sie müssen dann jedoch einen benutzerdefinierten Autoloader erstellen, da derselbe Composer-Hack zur Autoload-Generierung nicht verwendet werden kann.

Wenn das Laden nativer PHPUnit-Dateien trotzdem verhindert werden soll, muss ein solcher benutzerdefinierter Autoloader sicher direkt vor der Composer-Autoload-Datei gebootet werden.

Unit-Tests

Für Unit-Tests mit Hilfe von Mockery oder BrainMonkey ist PHPUnit > 8 erforderlich, da das für PHPUnit 7.x verfügbare Mockery-Framework nicht mit PHP 8.0 kompatibel ist. Daher ist die Vergleichbarkeit dieser Testsuiten mit PHPUnit 5 bis 9 obligatorisch, was sicherlich eine weitere Herausforderung hinzufügt.

Wie?

Verschiedene Versionen von PHPUnit sind erforderlich, um jede Testsuite auszuführen, wenn beide Arten von Testsuiten verwendet werden. Um diesen Umstand noch zu verschlimmern, haben Plug-ins normalerweise eine festgelegte composer.lock-Datei, um sicherzustellen, dass ihre Laufzeitabhängigkeiten einer bestimmten Version entsprechen, auf die sie sich verlassen können und die vollständig mit PHP 5.6 kompatibel ist.

Unit-Tests

Zu bestimmten Zeiten wird dieser letzte Teil erzwungen, indem in der Datei composer.json eine PHP 5.6-artige Konfiguration der Plattform vorhanden ist. Das bedeutet auch, dass ihre Dev-Abhängigkeiten BrainMonkey, Mockery, PHPUnit ebenfalls bei einer Version gesperrt werden, die mit PHP 5.6 kompatibel ist. Nun, das würde sicherlich das Ausführen von Tests auf PHP 8.0 verhindern.

Sie können dies überwinden, indem Sie neben der Aktualisierung der composer.lock-Dateien und der composer.json die Plattform on-the-fly entfernen. Dies macht die Ausführung der Tests auf PHP 8.0 jedoch sowohl in CI als auch lokal für die Entwickler aufwändiger.

Die PHP 8-Kompatibilität sieht auf großen WordPress-Sites etwas schwierig aus

Allein durch die Untersuchung einer Kette von Breaking Changes in PHP 8 konnten wir bestätigen, dass dies dazu neigt, auf Websites mit unklarem Grund für diesen Bruch große Brüche zu verursachen. Zu bestimmten Zeiten tritt der Fehler an einer Stelle auf, wird aber von einem Thema oder Plugin an einer anderen Stelle generiert, und das würde das Debuggen dieser Probleme sicherlich ziemlich schwierig machen.

accuwebhosting.com ist sicherlich eine aktiv gepflegte WordPress-Site, die von einem engagierten Team professioneller Entwickler unterstützt wird. Die überwiegende Mehrheit der WordPress-Sites verfügt nicht über einen solchen Luxus, und die Minderung von Kompatibilitätsproblemen auf diesen Sites wird mit Sicherheit eine Herausforderung sein.

Wie lange müssen Entwickler aktualisieren?

Der Lebenszyklus jeder Version von PHP beträgt 2 Jahre, und Fehler werden in dieser Zeit behoben. Ein weiteres Jahr wird hinzugefügt, in dem Sicherheitsprobleme gepatcht werden. PHP 7.4 kam im November 2019 an. Es war die endgültige Version von PHP 7. Das bedeutet, dass Fehler in PHP 7.4 bis November 2021 behoben werden. Sicherheitsprobleme werden bis November 2022 gepatcht. Es wird sein „End of Life“ erreichen. zu diesem Zeitpunkt.

Entwickler müssen aktualisieren

Daher ist der endgültige Stichtag November 2022: Der gesamte PHP-Code muss bis zu diesem Zeitpunkt mit PHP 8 kompatibel sein, da sonst die Gefahr besteht, auf einer potenziell anfälligen PHP-Version hängen zu bleiben.

Fazit

PHP 8 wird zahlreiche Breaking Changes enthalten. Wir haben in unserem Bericht eine große Auswahl dieser Änderungen beschrieben, von denen unsere Experten annehmen, dass sie neben dem breiteren WordPress-Ökosystem die stärkeren Auswirkungen auf WordPress haben werden. Diese müssen sich in der Regel damit auseinandersetzen, dass Warnungen zu Problemen werden. Und es werden mehrere Fehler eingeführt, die schwer zu handhaben sein können. Sie können einen höheren Prozentsatz dieser Änderungen zur Laufzeit erkennen.

Die Behebung all dieser Kompatibilitätsprobleme ist eine riesige Aufgabe. Um dies zu erreichen, müssen Sie eine Vielzahl von Strategien anwenden, angefangen von statischen Analysen bis hin zu automatisierten Tests. Es erfordert viel Zeit + Aufwand.

Sie sollten das Recht auf Werkzeuge haben, um alles perfekt durchzuführen. Für Projekte wie WordPress, die eine Vielzahl von PHP-Versionen unterstützen müssen, werden mehrere zusätzliche Komplexitäten beim Jonglieren mit verschiedenen Versionen der Analysetools eingeführt, wie wir oben besprochen haben.

Sicherlich wird es ziemlich schwierig, da die Laufzeit- und Syntaxunterschiede zwischen PHP 5 und 8 so unglaublich groß sind.

Ist die Verwendung von PHP 8 auf WordPress gut oder nicht? Eigentlich ist hier nicht das Argument. Die einzige Schlussfolgerung hier ist – es wird sehr schwierig, dies zu tun.

Außerdem haben wir das Problem der Abdeckung und der PHP-Abhängigkeiten von WordPress berücksichtigt. Will man Kompatibilität zuverlässig erkennen, erweist sich eine hohe Testabdeckung als notwendig. Und wenn wir über PHP 8 sprechen, ist es sogar noch wichtiger, weil die Anzahl der Kompatibilitätsprobleme höher als gewöhnlich ist. Ein großer Prozentsatz von ihnen kann nur zur Laufzeit erkannt werden.

Also, was raten wir?

Wenn Probleme erkannt werden, ist ein umfangreiches Debugging erforderlich, um die Wurzel des Problems zu finden, unabhängig davon, ob es sich um WordPress, Theme, Plugin oder direkt mit der PHP-Kompatibilität verbunden ist.

Die Testabdeckung für Abhängigkeiten ist praktisch nicht vorhanden und gering. Daher ist es schwer zu sagen, was die Kompatibilität des WordPress-Kerns mit PHP 8 im eigentlichen Sinne ist.

Da sich PHP 8 so stark auf strikte Typisierung konzentriert, wird das typunsichere Erweiterungssystem von WP besonders anfällig für Probleme, was möglicherweise dazu führt, dass Plugins Typfehler in anderen Plugins oder WP selbst erzeugen.

Wir haben dies getestet, indem wir im letzten Monat eine Analyse der Fehlerdaten durchgeführt haben. Da es sich um eine riesige Website handelt, dachten wir, dass sie einen starken Hinweis auf die Art von Problemen geben könnte, die wir erwarten können. Sicherlich haben wir mehrere Warnungen gefunden, die sich mit PHP 8 zu Fehlern entwickeln werden.

Wir möchten hier lieber eine abschließende Bemerkung machen. WordPress ist nicht die einzige verfügbare Legacy-Codebasis. Es ist auch nicht das einzige Projekt, das darauf abzielt, eine große Auswahl an PHP-Versionen zu unterstützen. Die Informationen in diesem Artikel gelten möglicherweise auch für andere Projekte.

Das Hauptziel dieses Artikels von Accuweb ist es, zu informieren und einen Überblick über die Herausforderungen und Probleme im Zusammenhang mit der PHP 8-Kompatibilität in WP zu geben. Wir hoffen sehr, dass es diesen Zweck perfekt erfüllt.