Viele Technikbegeisterte sind von PHP 8.0 aufgrund der wesentlichen Änderungen begeistert. Es wird einige Zeit dauern, bis jeder die Kompatibilität, Konfigurationen, Vorteile und mehr im Zusammenhang mit PHP 8 mit WordPress PHP 8 begreift. Unter diesen Überlegungen stellt sich eine wichtige Frage: „Ist WordPress derzeit mit PHP 8 kompatibel? Wenn nicht, welche Schritte sind erforderlich.“
Nach der Veröffentlichung von PHP 8 befasste sich unser Expertenteam sofort mit umfassenden Tests auf den tiefsten Ebenen. Die Ergebnisse, die wir erzielt haben, sind wirklich erstaunlich. Wir freuen uns, unsere Erkenntnisse, Berichte und Testergebnisse vertrauensvoll zu teilen.
Wir erläutern Ihnen nicht nur die Änderungen, sondern beraten Sie auch unvoreingenommen, ob ein Update auf PHP 8 für Sie empfehlenswert ist.
So viele Breaking Changes in PHP 8: Aber was ist der Grund?
PHP 8 stellt ein bedeutendes PHP-Update dar, bei dem häufig negative Aspekte in Hauptversionen aus neueren Nebenversionsbereichen entfernt werden. Bemerkenswert ist, dass bei PHP 8 mehrere Breaking Changes, die in den vorherigen 7.*-Versionen vorhanden waren, reduziert wurden.
Daher sollte das Upgrade für Projekte, die im Laufe der Jahre kontinuierlich aktualisiert wurden, um veraltete APIs zu berücksichtigen, keine nennenswerten Herausforderungen darstellen. Tatsächlich kam es bei PHP 7.*-Versionen im Vergleich zu früheren PHP-Versionen zu einer wesentlich größeren Anzahl an veralteten Versionen.
Der Übergang von PHP 5.6 auf PHP 7 erwies sich als relativ unkompliziert, wohingegen der Übergang von 7.x auf 8 eine Herausforderung darstellen könnte – insbesondere für ältere Codebasen wie WordPress und zahlreiche zugehörige Plugins.
Bei Codebasen, die gut typisiert sind oder mit den neuesten PHP-Versionen auf dem neuesten Stand gehalten werden, ist es sicherlich weniger wahrscheinlich, dass größere Probleme auftreten. Dennoch ist es wichtig anzuerkennen, dass WordPress nicht in diese Kategorie der Codebasis fällt.
Ist WordPress bereits mit PHP 8 kompatibel?
Ehrlich gesagt ist WordPress möglicherweise bereits mit PHP 8 kompatibel, aber wir können das nicht definitiv behaupten. WordPress ist bestrebt, die Kompatibilität mit den neuesten PHP-Versionen konsequent aufrechtzuerhalten. In diesem Leitfaden werden wir jedoch die Hauptanliegen eingehend untersuchen.
Wir haben eine Vielzahl von Kompatibilitätsproblemen mithilfe verschiedener verfügbarer Strategien sorgfältig angegangen. In den folgenden Abschnitten werden wir die Details unserer Bemühungen untersuchen, einschließlich der identifizierten Herausforderungen und der von uns entwickelten Lösungen.
Welche Leistungsänderungen kommen?
Eine der bedeutenden und möglicherweise aufregenden Funktionen, die in PHP 8 eingeführt wurden, ist die JIT-Kompilierung (Just In Time) und das Debuggen. Nach allgemeiner Auffassung fungiert PHP als interpretierte Sprache. Mit anderen Worten: Es wird zur Laufzeit in Maschinencode übersetzt.
JIT überwacht häufig verwendeten Code und optimiert die Übersetzung von Maschinencode für eine verbesserte Wiederverwendbarkeit. Dies kann zu erheblichen Leistungssteigerungen für bestimmte Funktionalitäten führen.
Die Integration der Just-In-Time-Kompilierung (JIT) in verschiedene Programmiersprachen wie JavaScript hat in der Vergangenheit zu einem rasanten Anstieg der Entwicklung neuartiger Anwendungen geführt. Beispielsweise wäre die Idee, dass virtuelle Maschinen in JS ausgeführt werden, in der Anfangsphase des Webs undenkbar gewesen. Mehrere Aufgaben, für die zuvor serverseitige Modulinstallationen erforderlich waren, sind jetzt durch Kernbibliotheken von PHP möglich.
Derzeit verzeichnen Webanwendungen wie WordPress nur geringfügige Leistungsverbesserungen. Darüber hinaus wird viel Zeit benötigt, bis Entwickler oder typische WordPress-Benutzer die Vorteile dieser neuen Funktion in vollem Umfang nutzen können.
Zahlreiche Zusatzfunktionen zielen darauf ab, das Erlebnis für Entwickler zu verbessern. Es ist jedoch unwahrscheinlich, dass diese Verbesserungen sofort in WP-Themes und Plugins übernommen werden. Diese Zurückhaltung ist auf die Tatsache zurückzuführen, dass die meisten dieser Updates möglicherweise die Kompatibilität mit früheren PHP-Versionen beeinträchtigen könnten, die immer noch auf zahlreichen WordPress-Sites verbreitet sind.
Wie aktualisiere ich PHP für Ihre WordPress-Site?
Dieser Leitfaden beschreibt eine praktische Methode, um PHP auf die neueste Version zu aktualisieren, ohne dass es zu Störungen Ihrer WordPress-Site kommt.
Um den Vorgang zu verstehen, überprüfen Sie zunächst Ihre aktuelle PHP-Version. Als nächstes aktualisieren Sie WordPress auf die neueste Version. Anschließend installieren Sie das Plugin „one.com PHP Scanner“ und führen einen Scan durch, um mögliche Probleme zu beheben. Anschließend aktualisieren Sie PHP auf die aktuellste Version. Bewerten Sie abschließend die Funktionalität Ihrer Website, um sicherzustellen, dass sie wie vorgesehen funktioniert.
Lassen Sie uns den gesamten Prozess durchgehen.
1: Check your current PHP version
At the outset, it’s essential to determine the current PHP version in use. Retrieve this information from your website’s phpinfo page.
If your website is hosted on cPanel, you can check the PHP version by following the steps outlined in the article on viewing and changing PHP versions in cPanel.
2: Update WordPress to the newest version
To prevent any issues, make sure to update the WordPress core, plugins, and themes to their latest versions. This will help you avoid potential malfunctions.
- Log in to your WordPress Admin, then click Dashboard > Updates.
- Ensure you have the most recent WordPress version installed and that all themes and plugins are up to date. Proceed to update your WordPress to the latest version promptly.
3: Install the “one.com PHP scanner
- In your WordPress Admin, go to one.com > Plugins
- Find the one.com PHP scanner and click on “Install now.
- Now, click Activate, and proceed to the next step.
4: Run a scan & fix potential issues
- On the left menu, click the PHP scanner.
- Select PHP version 7.4, choose “All themes and plugins,” and then click Start scan.
- Please proceed once the scan has finished.
- You can have three results:
Compatible = It means all is good!
Warning = It suggests that it should function properly but could potentially encounter problems with future PHP versions.
Error = It’s not very satisfactory and is likely to lead to problems after the update.
Resolve issues with themes or plugins displaying errors by either updating them to their most recent versions or replacing them with alternative plugins that offer similar functionality.
Tip: It is advisable to utilize only regularly updated plugins that demonstrate compatibility with the latest WordPress version. Additionally, removing unnecessary plugins can contribute to improved site performance.
5: Update PHP to the 8.0 version
You’re now ready to update PHP. We advise enabling PHP error messages at the same time. If any problems arise with the code, you’ll receive error messages indicating the root cause and its specific location.
- In the control panel, return to PHP and database settings.
- Scroll down to PHP error messages.
- Click Update after setting the error messages to On.
- Change the version below this and tap Update.
6: Please verify if your website is functioning as expected
After successfully updating the PHP version, it may take around 20 minutes for the changes to take effect. For websites with high visitor traffic, this duration could potentially extend to several hours. Therefore, we advise closely monitoring your website multiple times within the next 24 hours.
If your website isn’t functioning as anticipated, the primary culprit could be your theme or plugins. To pinpoint the exact cause of problems, you need to identify.
- To temporarily switch to the default WordPress theme, “Twenty Seventeen,” we would say, “Twenty Seventeen” is the theme to use.
- Choose all currently installed plugins and deactivate them collectively.
- Re-enable themes and plugins one by one, while continuously testing your site’s functionality. This method can help identify the source of issues effectively.
Speaking technically, the current nightly version of WordPress exhibits compatibility with the much-discussed PHP 8, akin to the alignment seen in WordPress releases just prior to the emergence of a new PHP version. If you’re looking to Hire WordPress Developers in USA, you can benefit from their expertise in leveraging this compatibility for your projects.
We conducted thorough testing, employed meticulous fixes, and addressed compatibility issues with the same rigor as PHP compatibility adjustments within the WordPress core. However, failure to adhere to this guide could hinder your comprehension of compatibility challenges and limit your ability to fully leverage the advantages of PHP 8.
WordPress PHP8 Compatibility challenges
Here are several approaches you can use to ensure your current codebase aligns with WordPress PHP 8 Compatibility.
- Utilize static analysis tools like PHPCompatibility for identifying syntactic issues.
- Implementing Automated Testing for Runtime Problem Detection
- Manually testing for runtime problems.
Based on the coverage of your test suite and the ratio of syntactic changes to runtime, These strategies effectively address codebase compatibility with a new PHP version (currently discussing PHP 8).
Indeed, PHP 8 and WordPress present a few additional challenges that hinder the seamless implementation of these strategies for ensuring absolute compatibility. Below, we’ll detail the strategies we’ve employed for WordPress, along with the outcomes we’ve experienced.
Static analysis tools
Due to specific changes in PHP 8.0, static analysis has limitations in detecting problems. In cases where static analysis aims to exceed traditional capabilities and intends to track variable and constant values along with runtime types, such scans’ outcomes will likely have false positives.
PHP Compatibility stands as the sole static analysis tool designed for detecting PHP cross-version compatibility issues.
In addition to PHP compatibility, other static analysis tools report on a broader range of issues. Valuing the results for detecting PHP cross-version compatibility related issues that are genuinely accurate requires a significant investment of time and a deep understanding of the tools, particularly in terms of configuring them to minimize unnecessary noise.
At the same time, these tools constantly face instability as they adapt to changes in the PHP version and update the potential scans. Therefore, we can anticipate that these tools will continue to identify even more issues in the future.
So regardless of what has been and can be discovered further at this time, these tools are likely to uncover more issues in the (near) future.
Scanning WordPress PHP 8 Compatibility
PHPCompatibility identifies the issue of “__destruct() not being called after die() in __construct()” but upon deeper analysis, we find that it’s not problematic in this case.
PHPCompatibility flagged an issue in code utilized by the “Plugin/Theme editor.” Analyzing the involved code revealed a fundamental oversight. While in the editor, WordPress aims to perform minimal code analysis, it disregards PHP 5.3+ code.
Considering the relevant changes in PHP 8, addressing this oversight has become more complex to resolve. We conducted scans using PHPCompatibility with the developed version, and as anticipated, the results differed significantly from those obtained with previous PHP updates. The scanner has identified issues that are maintained externally.
Scannen von WordPress mit Exakat
Im letzten öffentlichen Scan, der am 16. Oktober unter Verwendung von WP Trunk durchgeführt wurde, meldet Exakat insgesamt 149.567 Probleme.
Der WordPress PHP 8-Kompatibilitätsbericht zeigt insgesamt 93 Probleme an. Allerdings ist der Bericht unvollständig, da er keine Analyse der für PHP 8 relevanten Zahlen enthält.
Wir gehen davon aus, dass diese Berichte wahrscheinlich eine erhebliche Anzahl falsch positiver Ergebnisse enthalten werden, da WordPress keine Typdeklarationen verwendet. Folglich werden die Typen aus dem identifizierten Code und den in Docblocks angegebenen Typen extrapoliert. Dennoch bleibt es wichtig, diese Themen individuell zu prüfen und zu bewerten.
WordPress mit PHPStan scannen
PHPStan-Scans erfordern einen vollständig angepassten Regelsatz, um remote nutzbare Ergebnisse zu erzielen. Dennoch enthalten diese Scans selbst nach der Investition in die Anpassung am Ende immer noch einige Fehlalarme, wodurch die Ausgabe unbrauchbar wird.
Notes: Wir kritisieren die PHPStan-Tools nicht, aber der wesentliche Grund dafür ist, dass WordPress kaum Typdeklarationen verwendet. Umgekehrt richtet sich PHPStan hauptsächlich an Projekte, die modernen Code verwenden.
Die einfachste Konfiguration führt bei einem ersten Scan zu über 20.000 Problemen. Selbst bei Verwendung des oben erwähnten, umfassend angepassten Regelsatzes, der darauf ausgelegt ist, Probleme im Zusammenhang mit PHP 8 zu lokalisieren, zeigen die Ergebnisse genau 580 Probleme auf Stufe 5 sowie zusätzliche 2.150 potenzielle Probleme auf Stufe 7. Auch wenn diese einige Fehlalarme enthalten können, werden sie dennoch generiert 380 weitere Ausgaben auf Stufe 8, mit einem ähnlichen Haftungsausschluss.
Das Team hat kürzlich ein Trac-Ticket eröffnet, um eine Liste von Problemen zu lösen, die auf eine unbekannte Konfiguration zurückzuführen sind. Der Fokus liegt jedoch ausschließlich auf der Behebung von Parametertypkonflikten (Stufe 5). Zur Behebung dieser Probleme liegt nun ein PR-Entwurf vor.
Es ist derzeit unklar, ob die vorgeschlagenen Korrekturen gerechtfertigt sind oder ob wir die identifizierten Probleme als Fehlalarme betrachten sollten.
Testing
Die statische Analyse kann aufgrund der Art der problematischen Swaps in PHP8 nur einen gewissen Umfang erreichen. Das manuelle Überprüfen und Testen von Software erweist sich als mühsame Arbeit, und Menschen neigen auch dazu, Dinge zu übersehen, wenn sie auf vieles achten müssen.
Wenn Endbenutzer Tests durchführen, führt dies tendenziell zu relativ nutzlosen Ergebnissen, da sie sich normalerweise auf das Testen der „glücklichen Pfade“ konzentrieren. Um zuverlässigere Ergebnisse zu erzielen, benötigen wir umfangreiche explorative und Regressionstests.
Priorisieren Sie qualitativ hochwertige automatisierte Tests und führen Sie sie auf PHP 8 aus, da dies einen klaren Hinweis darauf gibt, welche PHP 8.0-Probleme zu erwarten sind.
Nach der Veröffentlichung von PHP 8 hat sich unser Expertenteam sofort mit umfassenden Tests beschäftigt, und die Ergebnisse können jeden schockieren! Wir verfügen nun über umfassendes Wissen und sind stolz darauf, die Berichte und Ergebnisse unserer Tests zu präsentieren.
Fahren wir nun mit der Ausführung automatisierter Tests auf PHP 8 fort.
Ausführen automatisierter Tests auf PHP 8
PHPUnit 9.3 wurde im August 2020 veröffentlicht und war die erste Version, die offiziell mit PHP 8.0 kompatibel war. Allerdings stellt die Ausführung einer automatisierten Testsuite auf PHP als De-facto-Tool für Unit-Tests eine Herausforderung dar.
Wir sind uns bewusst, dass WordPress mindestens PHP 5.6 unterstützt. Um Tests auf PHP 8.0 auszuführen, muss jede mit WordPress verbundene Testsuite vollständig mit den PHPUnit-Versionen 5 bis 9 kompatibel sein. Obwohl es Tools gibt, die dabei helfen, erfordert die Anpassung einer Testsuite, um Kompatibilität zu erreichen, immer noch Aufwand und Zeit.
Beginn der Tests für WordPress Core auf PHP8
Die Tests für WP Core bestehen derzeit und laufen unter PHP 8. Diese Tests werden auf der vom Composer installierten Version von PHPUnit 7.5 ausgeführt. Obwohl PHPUnit 9.3 die früheste PHPUnit-Version ist, die offiziell mit PHP 8 kompatibel ist.
Die Lösung des neuesten Problems bestand darin, einen bestimmten Satz von Dateien/Klassen von PHPUnit 9.3 in die WordPress-Testsuite zu kopieren. Wir haben die nativen PHPUnit-Klassen von der Generierung im Composer-Autoload ausgeschlossen, sodass wir die kopierten Dateien von PHPUnit 9.3 in der WordPress-Testsuite verwenden können. Derzeit ist dieser Ansatz funktionsfähig, kann jedoch als Notlösung angesehen werden und ist möglicherweise in Zukunft nicht mehr realisierbar. Darüber hinaus könnte eine laufende Wartung erforderlich sein.
Um die Testqualität sicherzustellen, war der ursprüngliche Ansatz wahrscheinlich unzureichend, da in den meisten Fällen eine lose Typprüfung zum Einsatz kam.
Um dieses Problem zu beheben, eröffnete das Team im Jahr 2016 ein Trac-Ticket. Aufgrund der strengeren Typeinhaltung in PHP wurde dieses Ticket wiederhergestellt. Das Team hat erhebliche Anstrengungen unternommen, um dieses Problem zu beheben.
Während wir geschrieben haben, haben wir ungefähr 800 Instanzen eingebunden (bestehend aus 676 AssertEquals()-Ergänzungen und 96 AssertNotEquals()). Wir sind auch von der losen Typprüfung umgestiegen und haben sie von über 8000 Instanzen reduziert.
Testen von Themes und Plugins
Nur ein kleiner Prozentsatz der verfügbaren Plugins, insbesondere die professionell entwickelten und bekannteren, verfügen über automatisierte Tests. Im Allgemeinen ist diese Situation besorgniserregend, da eine typische WordPress-Site etwa 19 oder 20 Plugins verwendet. Einige Seiten arbeiten sogar mit einer höheren Anzahl an Plugins. Automatisierte Tests für Themes sind in diesem Zusammenhang noch seltener.
Die Ausführung dieser Testsuiten auf PHP Version 8 zu ermöglichen, stellt eine gewaltige Herausforderung dar. Darüber hinaus erfordert der Gewinn von Einblicken in die Anpassungsfähigkeit von Plugins und Themes an PHP 8 Aufmerksamkeit, bevor Schlussfolgerungen gezogen werden können.
Themes und Plugins mit Tests bieten typischerweise zwei Haupttypen von Tests, die effektiv implementiert werden können oder auch nicht:
Unit tests: Vereinzelte Bewertungen, die WordPress kritisieren und eine Untersuchung des Plugin-Codes ermöglichen, nutzen häufig bekannte Frameworks wie BrainMonkey und Mockery.
Integration tests: Bei Integrationstests wird WordPress vollständig geladen, bevor die Testsuite ausgeführt wird. Dieser Prozess nutzt den WP-Kerncode und lässt sich nahtlos in die WP-Testsuite integrieren.
Integration tests
WordPress hat sich entschieden, bei PHPUnit 7.5 zu bleiben. Welche Auswirkungen hat diese Entscheidung?
Für Integrationstests im Zusammenhang mit Themes und Plugins werden wir auf PHPUnit 7.5 umsteigen.
Themes und Plugins müssen entweder den Hack im WP Core replizieren, um eine nahtlose Ausführung des Integrationstests zu erreichen, oder sie müssen die Dateien im WP Core nutzen. Anschließend müssen sie jedoch einen benutzerdefinierten Autoloader generieren, da sie nicht denselben Composer-Autoload-Generierungs-Hack verwenden können.
Unit tests
Unit-Tests mit Mockery oder BrainMonkey erfordern eine PHPUnit-Version größer als 8. Das Mockery-Framework, auf das PHPUnit 7.x zugreifen kann, ist nicht mit PHP 8.0 kompatibel. Folglich muss die Kompatibilität dieser Testsuiten zwischen den PHPUnit-Versionen 5 bis 9 sichergestellt werden. Dies stellt sicherlich eine zusätzliche Herausforderung dar.
PHPUnit erfordert unterschiedliche Versionen, um jede Testsuite auszuführen, wenn beide Arten von Testsuiten verwendet werden. Um diese Situation zu erschweren, verwalten Plugins normalerweise eine festgeschriebene Datei „composer.lock“. Diese Datei stellt sicher, dass die Laufzeitabhängigkeiten der Plugins auf einer bestimmten Version bleiben. Die gewählte Version ist zuverlässig und vollständig kompatibel mit PHP 5.6.
Um diesen letzten Aspekt sicherzustellen, erzwingen Entwickler manchmal eine PHP 5.6-Konfiguration auf der Plattform über die Datei „composer.json“. Folglich führt diese Aktion auch zur Versionssperre ihrer Entwicklungsabhängigkeiten: BrainMonkey, Mockery und PHPUnit. Diese Abhängigkeiten werden auf Versionen beschränkt, die mit PHP 5.6 kompatibel sind. Folglich wäre die Durchführung von Tests auf PHP 8.0 sicherlich verhindert.
Die Kompatibilität mit PHP 8 stellt auf großen WordPress-Sites eine Herausforderung dar
Durch die Untersuchung einer Reihe bahnbrechender Änderungen in PHP 8 konnten wir bestätigen, dass diese Version wahrscheinlich zu erheblichen Störungen auf Websites führen wird. Der Grund für den Fehler ist unklar und in manchen Fällen treten Fehler an einer Stelle auf, werden aber an anderer Stelle von einem Theme oder Plugin generiert. Diese Situation würde das Debuggen dieser Probleme sicherlich zu einer ziemlichen Herausforderung machen.
Wie lange müssen Entwickler aktualisieren?
Jede PHP-Version hat einen zweijährigen Lebenszyklus, in dem Entwickler Fehler beheben. Das PHP-Entwicklungsteam hat nach der Veröffentlichung von PHP 7.4 im November 2019 als letzte Version von PHP 7 ein zusätzliches Jahr eingeplant, um Sicherheitsprobleme durch Patches zu beheben. Folglich werden die PHP 7.4-Fehler bis November 2021 behoben und Sicherheitsprobleme werden bis November gepatcht 2022. Zu diesem Zeitpunkt ist das „End of Life“ für PHP 7.4 geplant.
Der feste Stichtag November 2022 bedeutet also, dass bis zu diesem Zeitpunkt der gesamte PHP-Code mit PHP 8 kompatibel sein muss. Andernfalls besteht die Gefahr, dass Sie auf einer potenziell anfälligen PHP-Version hängen bleiben.
Abschluss
PHP 8 wird zahlreiche bahnbrechende Änderungen einführen. Unser Bericht beschreibt eine beträchtliche Anzahl dieser Änderungen, von denen unsere Experten glauben, dass sie stärkere Auswirkungen auf WordPress sowie das breitere WordPress-Ökosystem haben werden. Bei diesen Änderungen geht es in erster Linie um Warnungen, die sich zu Problemen entwickeln, sowie um die Einführung mehrerer Fehler, deren Behebung schwierig sein kann. Es ist möglich, einen höheren Prozentsatz dieser Änderungen zur Laufzeit zu identifizieren.
Die Lösung all dieser Kompatibilitätsprobleme stellt eine erhebliche Aufgabe dar. Um dies zu erreichen, müssen Sie eine Reihe von Strategien anwenden, angefangen bei statischer Analyse bis hin zu automatisierten Tests. Dieses Unterfangen erfordert viel Zeit und Mühe.
Sie sollten über die notwendigen Werkzeuge verfügen, um Aufgaben fehlerfrei auszuführen. Projekte wie WordPress, die eine Reihe von PHP-Versionen unterstützen müssen, führen, wie bereits erwähnt, zu mehreren zusätzlichen Komplexitäten bei der Verwaltung verschiedener Versionen der Analysetools.
Sicherlich wird der Umgang mit den enormen Laufzeit- und Syntaxunterschieden zwischen PHP 5 und 8 eine ziemliche Herausforderung.
Die Verwendung von PHP 8 mit WordPress ist nicht unbedingt gut oder schlecht. Der Fokus liegt hier nicht auf dem Argument selbst, sondern vielmehr auf der Schlussfolgerung, die sich daraus ergibt – die Verwendung von PHP 8 mit WordPress wird ziemlich herausfordernd.
Wir haben uns auch mit der Abdeckung und den PHP-Abhängigkeiten von WordPress für eine zuverlässige WordPress PHP 8-Kompatibilität befasst. Eine hohe Testabdeckung ist unerlässlich. Darüber hinaus wird dies im Fall von PHP 8 aufgrund der im Vergleich zur Norm größeren Anzahl von Kompatibilitätsproblemen noch kritischer. Die meisten dieser Probleme können während der Laufzeit identifiziert werden.