Alle Infos zur aktuellen PHP Version: PHP 8.X
Das Wichtigste auf einen Blick
Was sind die interessantesten Änderungen?
Tipp
Die neuesten PHP-Versionen sind bei unseren Webhosting Paketen immer in kürzester Zeit verfügbar.
Weitere Artikel zum Thema PHP
PHP 8.3
Alle Infos zu den neuen Funktionen und Verbesserungen.
PHP verwalten
PHP auf Ihrem Webhosting verwalten.
WordPress PHP-Version aktualisieren
Sorgenfreies Update Ihrer WordPress PHP-Version
PHP ist eine sehr weit verbreitete Programmiersprache für Webanwendungen und gehört zu den zentralen Technologien des Internets.
Mit PHP lassen sich serverseitig dynamische Webseiten erstellen. Dabei werden die Seiten bei jedem Aufruf neu generiert – häufig durch das Abrufen von Inhalten aus einer Datenbank. Laut W3Techs hat PHP in diesem Bereich einen Marktanteil von etwa 75 %, was bedeutet, dass die überwiegende Mehrheit der Websites auf dieser Technologie basiert.

Aktuelle PHP Version
Die aktuellste PHP-Version ist 8.4, sie wurde im November 2024 veröffentlicht. PHP 8.3 wird noch bis Ende 2025 unterstützt. Für ältere Versionen wie 8.0 und 7.4 gibt es keinen Security Support mehr. Ein Update auf die neueste Version wird empfohlen.
PHP Version 8: Erschien am 26. November 2020 und bietet zahlreiche wichtige Neuerungen und erweiterte Gestaltungsmöglichkeiten für Websites.
Version PHP 8.3 : Veröffentlicht am 23. November 2023, bringt zusätzliche Verbesserungen mit sich.

Was bedeutet das Erscheinen einer neuen PHP-Version?
Zusammenfassung
Durch das Erscheinen neuer PHP-Versionen können Entwickler von optimierter Performance und erweiterten Funktionen profitieren. Es ist jedoch wichtig, den eigenen Code regelmäßig auf Kompatibilität zu prüfen, um von den Verbesserungen der neuen Version voll zu profitieren.
Viele PHP-Anwender nutzen die Sprache zur Erstellung ihrer Programme, ohne tiefere Einblicke in die internen Abläufe auf dem Server zu haben. Das Ergebnis: Wenn eine neue PHP-Version erscheint, ist oft unklar, welche Veränderungen dies mit sich bringt und wie sie den Programmcode beeinflusst.
Um die Bedeutung einer neuen PHP-Version besser zu verstehen, lohnt es sich, den Hintergrundprozess kurz zu beleuchten.
Wie PHP-Code ausgeführt wird:
Wenn Sie ein PHP-Programm schreiben, besteht es aus Textzeichen, die der Computer nicht direkt ausführen kann. Er benötigt Maschinensprache, also Binärcodes, um Befehle zu verarbeiten. Da PHP eine „höhere Programmiersprache“ ist, fasst ein PHP-Befehl oft mehrere maschinensprachliche Befehle zusammen. Ein Übersetzungsprozess – durchgeführt vom PHP-Interpreter, der meist schon auf dem Server installiert ist – wandelt den PHP-Code in Maschinensprache um, sodass er ausgeführt werden kann.
Was ändert sich mit einer neuen PHP-Version?
Das Erscheinen einer neuen PHP-Version bedeutet, dass eine Aktualisierung des PHP-Interpreters erfolgt ist. Diese Änderungen können auf zwei Ebenen erfolgen:
1. Optimierung der internen Abläufe:
Durch eine verbesserte interne Struktur kann der Übersetzungsprozess beschleunigt werden, was die Performance des PHP-Codes erhöht. So können Seitenaufrufe schneller erfolgen, was insbesondere für Seiten mit hohem Datenverkehr von Vorteil ist.
2. Anpassung und Modernisierung der Programmiersprache:
Eine neue PHP-Version kann auch Änderungen an der Sprache selbst mit sich bringen. Der Interpreter prüft den Programmcode auf Syntax und logische Fehler und stoppt die Ausführung, wenn inkorrekte Befehle oder veraltete Syntaxregeln verwendet wurden.
In einer neuen Version wird der Sprachumfang oft überarbeitet – neue Befehle und Funktionen kommen hinzu, während veraltete Befehle möglicherweise entfernt werden. Diese Anpassungen dienen dazu, die Sprache zu modernisieren, die Fehleranfälligkeit zu reduzieren und die Benutzerfreundlichkeit zu steigern.
Die neuen PHP 8 Features
In den folgenden Abschnitten erfahren Sie mehr über die Änderungen, mit denen die neue PHP Hauptversion kommt. Sie erhalten einen Überblick darüber, welche Verbesserungen PHP 8 mit sich bringt und welche neuen Befehle Sie verwenden können.
Außerdem wird aufgezeigt, dass einige Ausdrücke, die bislang erlaubt waren, mit PHP 8 abgeschafft werden. Das führt dazu, dass keine Abwärtskompatibilität besteht.
JIT-Compiler: bessere Performance für PHP-Programme
Die größte Neuerung in PHP 8 ist die Einführung des JIT-Compilers, der die Effizienz des Übersetzungsprozesses steigert, ohne die Sprachbefehle zu verändern. Diese Entwicklung könnte die Gestaltung von PHP-Programmen erheblich beeinflussen, da sie die Performance verbessert.
Hintergrund: Übersetzungsprozesse bei Programmiersprachen
Ein Computerprogramm muss zunächst in Maschinensprache übersetzt werden, bevor es ausgeführt werden kann. Es gibt zwei Ansätze dafür:
- Kompilierte Sprachen (z. B. C, C++): Der Code wird einmalig übersetzt und abgespeichert, sodass er ohne erneuten Übersetzungsaufwand ausgeführt werden kann. Dies erhöht die Performance.
- Interpretierte Sprachen (wie PHP): Der Code wird bei jeder Ausführung neu interpretiert, was mehr Ressourcen beansprucht und langsamer ist, aber plattformunabhängig bleibt, da ein PHP-Interpreter den Code auf jedem System ausführen kann.
Der Übersetzungsprozess in PHP
Der PHP-Interpreter durchläuft vier Schritte, um den Code auszuführen:
- Tokenisierung: Zeichen werden zu sinnvollen Einheiten (z. B. Variablen, Befehlen) zusammengefasst.
- Parsing: Der Code wird auf Syntaxfehler geprüft und als „Abstract Syntax Tree“ (AST) strukturiert.
- Kompilierung: Der AST wird in den Zend Opcode umgewandelt – eine Art Zwischencode.
- Ausführung: Die Zend VM übersetzt diesen Opcode in Maschinensprache und gibt die Befehle an die CPU weiter.
Seit PHP 5.5 beschleunigt die OPcache-Erweiterung diesen Ablauf, indem sie den Opcode nach der ersten Kompilierung speichert. Wird das Programm erneut ausgeführt, kann die Zend VM direkt darauf zugreifen, was Zeit spart.
Neuer Ansatz in PHP 8: Der JIT-Compiler
Der „Just in Time“ (JIT)-Compiler führt eine dynamische Optimierung ein, die besonders bei ressourcenintensiven Programmen von Vorteil ist. Der JIT-Compiler beobachtet während der Programmausführung wiederholt aufgerufene Codebereiche und übersetzt diese direkt in Maschinensprache, speichert sie ab und ruft sie bei Bedarf wieder auf – ohne erneute Übersetzung.
Diese Technik reduziert den Ressourcenverbrauch und erhöht die Performance, da der JIT-Compiler nicht alle Codeabschnitte jedes Mal neu übersetzen muss. Der JIT-Compiler ist optional und kann über die Servereinstellungen aktiviert werden.
Zusammenfassend steigert der JIT-Compiler die Effizienz von PHP, besonders bei komplexen Anwendungen, durch Reduzierung der Wiederholung im Übersetzungsprozess.
Die Auswirkungen des JIT-Compilers
Für die meisten Webseitenbetreiber und PHP-Programmierer ist nicht nur die Funktionsweise des neuen JIT-Compilers von Interesse, sondern in erster Linie seine Auswirkungen auf die tägliche Arbeit. Hierbei ist festzustellen, dass dieser zu einer deutlich schnelleren Ausführung von PHP-Programmen führt.
Performance-Tests von PHP-Versionen mit und ohne JIT-Compiler
Der Informatiker Pedro Escudero hat ein Experiment zur Performance von PHP 8 durchgeführt. Dabei hat er ein PHP-Script mit unterschiedlichen PHP-Versionen jeweils 100 Mal ausgeführt und jeweils die durchschnittliche Bearbeitungszeit ermittelt. Dabei kam er zu den folgenden Ergebnissen:
| PHP-Version | Ausführungszeit (s) |
|---|---|
| PHP 5.3 | 0.64574 s |
| PHP 7.4 | 0.10254 s |
| PHP 8 (ohne JIT) | 0.09822 s |
| PHP 8 (mit JIT) | 0.04459 s |
Die Ergebnisse zeigen, dass bereits zwischen PHP 5.3 und 7.4 eine erhebliche Verbesserung erreicht wurde, was vor allem auf die Einführung von Opcodes zurückzuführen ist. Doch die eigentliche Innovation in PHP 8 ist die Option, den JIT-Compiler zu aktivieren. Mit JIT lässt sich die Ausführungszeit nochmals deutlich halbieren, was einen eindrucksvollen Performance-Schub bedeutet.
Auswirkungen auf die Programmierung
Die verbesserte Performance von PHP 8 könnte die bisherige Praxis beeinflussen, rechenintensive Programmteile in anderen Programmiersprachen wie C oder C++ zu schreiben, um eine höhere Ausführungsgeschwindigkeit zu erreichen. Mit PHP 8 und aktiviertem JIT-Compiler wird es zunehmend möglich, auch komplexe Anwendungen vollständig in PHP zu entwickeln, was die Komplexität und den Aufwand bei der Programmgestaltung erheblich reduziert.
Auswirkungen auf gängige Anwendungen und CMS wie WordPress
Die entscheidende Frage für viele Anwender ist, wie sich der JIT-Compiler auf bekannte PHP-basierte Anwendungen wie WordPress oder andere Content Management Systeme auswirkt, die weltweit millionenfach im Einsatz sind und maßgeblich zur Verbreitung von PHP beitragen.
In diesen Systemen zeigen sich bislang nur geringfügige Performance-Verbesserungen. Dies liegt wahrscheinlich daran, dass die Ausführungsgeschwindigkeit oft durch andere Faktoren wie Datenbankabfragen oder HTTP-Anfragen limitiert wird. Das PHP-Entwicklerteam beobachtet jedoch diese Herausforderungen und arbeitet an Lösungen, um auch hier langfristig weitere Optimierungen zu ermöglichen.
Die neuen Befehle in PHP 8
Nach der Vorstellung der Änderungen bei der internen Funktionsweise des PHP-Interpreters befassen sich die folgenden Abschnitte mit den neuen Befehlen, die die Version PHP 8 mit sich bringt.
Auch hierbei kam es zu umfangreichen Änderungen, von denen sich einige sicherlich auf die tägliche Arbeit der PHP-Programmierer auswirken werden.
Named Arguments: Übergabe von Parametern mit einer Bezeichnung
Eine der wichtigsten Neuerungen besteht in der Einführung von Named Arguments – auch als Named Parameters bezeichnet.
Wenn Sie eine Funktion oder eine Methode in PHP erstellen, können Sie dieser bei ihrem Aufruf Werte übergeben. Diese Werte können Sie dann innerhalb der Funktion oder Methode für weitere Berechnungen verwenden. Dabei sind Sie nicht auf einen einzigen Übergabewert beschränkt. Sie können auch mehrere Werte aufnehmen.
Die folgende Funktion dient dazu, dies an einem kleinen Beispiel zu verdeutlichen. Sie nimmt zwei Werte auf, multipliziert sie mit unterschiedlichen Zahlen und gibt die Summe als Ergebnis aus:
function fun ($x, $y)
{
return $x * 4 + $y * 6;
}
echo fun(2,3);
Bei den bisherigen PHP-Versionen ist es notwendig, die Reihenfolge beim Aufruf der Funktion genau einzuhalten. Im Beispielprogramm wird etwa der Wert 2, der zuerst angegeben wird, der Variable $x zugeordnet. Die Variable $y erhält hingegen den zweiten Wert – also 3.
Mit PHP 8 ist es nun möglich, beim Aufruf der Funktion vorzugeben, welcher Variable die angegebenen Werte zugeordnet werden sollen. Das gibt Ihnen beispielsweise die Möglichkeit, die Reihenfolge umzukehren:
echo fun(y: 2, x: 3);
Auf diese Weise erhält die Variable $y den Wert 2 und die Variable $x den Wert 3, obwohl diese Werte in der umgekehrten Reihenfolge genannt werden.
Bei diesem Beispiel bringt die Verwendung von Named Arguments jedoch keine großen Vorteile. Es wäre genauso gut möglich, die Werte in der richtigen Reihenfolge zu nennen.
Interessant wird diese Möglichkeit jedoch, wenn Sie mit Standardwerten arbeiten. Diese machen es möglich, den Variablen einen bestimmten Wert zuzuweisen. Diesen sollen sie annehmen, wenn Sie beim Aufruf der Funktion hierfür keine Vorgaben machen:
function fun ($x = 4, $y = 2)
{
return $x * 4 + $y * 6;
}
echo fun();
In diesem Beispiel wird die Funktion ohne Übergabewerte aufgerufen. Daher nehmen die Variablen die vorgegebenen Standardwerte an – also x 4 und y 2. Häufig ist es hierbei gewünscht, nur für eine Variable einen individuellen Wert vorzugeben und für die andere Variable den Standardwert zu verwenden.
Bei den bisherigen PHP-Versionen werden die Werte jedoch stets genau in der vorgegebenen Reihenfolge vorgegeben. Wenn Sie nur einen Wert angeben, wird dieser der ersten Variable zugeordnet. Die zweite Variable erhält dann den Standardwert. Es ist nicht möglich, für die erste Variable den Standardwert zu verwenden und einen individuellen Wert für die zweite Variable vorzugeben.
Named Arguments beheben dieses Problem nun. Durch die Nennung des Bezeichners können Sie vorgeben, dass der Übergabewert der zweiten (oder einer beliebigen anderen) Variable zugeordnet werden soll. So können Sie den Wert für die erste Variable offenlassen, sodass diese den Standardwert annimmt:
echo fun(y: 2);
Inkompatible Signaturen bei überschriebenen Methoden
Der nächste Veränderung bezieht sich auf eine Anpassung der Verhaltensweise bei der Vererbung bei den bisherigen PHP-Versionen. Wenn Sie eine Methode in einer Klasse erstellen, wird diese automatisch vererbt, wenn Sie eine neue Klasse davon ableiten.
Allerdings besteht auch die Möglichkeit, die bisherigen Methode zu überschreiben. Hierfür müssen Sie lediglich in der abgeleiteten Klasse eine Methode mit dem gleichen Namen definieren. Da in PHP die Typisierung dynamisch erfolgt, ist es hierbei eigentlich nicht notwendig, einen Datentyp für die Übergabewerte anzugeben. Dennoch ist dies sinnvoll, um fehlerhafte Berechnungen durch inkompatible Datentypen zu vermeiden.
Wenn Sie nun eine Methode überschreiben, bei der ein Datentyp vorgegeben ist, sollten Sie auch für die neue Methode den gleichen Datentyp verwenden. Das sorgt für einheitliche Strukturen im Programm. Die bisherigen PHP-Versionen waren in dieser Hinsicht jedoch etwas inkonsequent. Das soll das folgende Codebeispiel zeigen:
class Klasse1
{
public function methode(int $a) {}
}
class Klasse2 extends Klasse1
{
public function methode(string $a) {}
}
Wenn Sie diesen Code mit einem bisherigen PHP-Interpreter ausführen, erscheint lediglich eine Warnmeldung. Die Ausführung des Programms ist jedoch trotz der unterschiedlichen Datentypen möglich. PHP 8 ist in dieser Hinsicht konsequenter und erzeugt eine Fehlermeldung.
Union Types: unterschiedliche Datentypen verwenden
Auch die folgende Änderung bezieht sich auf die Vorgabe von Datentypen für Methoden, Funktionen und zusätzlich auch für Klasseneigenschaften. Diese ist wie bereits dargestellt zwar optional, doch kann die Nennung eine Verarbeitung fehlerhafter Werte unterdrücken. Im Zweifelsfall ist es besser, das Programm direkt abzubrechen, statt falsche Werte weiterhin zu verwenden.
Als Beispiel hierfür dient eine Funktion, die das Quadrat des übergebenen Werts berechnet, dieses dann um 2 erhöht und den Wert daraufhin zurückgibt:
function fun ($zahl)
{
return $zahl * $zahl + 2;
}
Dabei liegt es auf der Hand, dass diese Funktion nur dann ordnungsgemäß funktioniert, wenn Sie ihr eine Zahl übergeben. Nun können Sie jedoch auch einmal ausprobieren, was passiert, wenn Sie stattdessen eine Zeichenkette verwenden:
echo fun("Hallo!");
In diesem Fall erscheint zwar eine Warnmeldung. Das Programm wird aber dennoch weiterhin ausgeführt. Die Zeichenkette wird als die Zahl 0 interpretiert. Daher gibt die Funktion den Wert 2 zurück. Selbstverständlich wäre es nun nicht sinnvoll, dieses fehlerhafte Ergebnis auch für weitere Berechnungen zu verwenden. Daher ist es möglich, vorzugeben, dass diese Funktion ausschließlich int-Werte annehmen soll:
function fun (int $zahl)
{
return $zahl * $zahl + 2;
}
Das führt dazu, dass sich die Funktion bei der Verwendung ganzer Zahlen korrekt ausführen lässt. Geben Sie jedoch eine Zeichenkette ein, führt das zu einer Fehlermeldung. Das entspricht bislang dem gewünschten Verhalten. Probleme können jedoch auftreten, wenn Sie nun eine Fließkommazahl übergeben. In diesem Fall wird der Wert automatisch in einen int-Wert umgewandelt. Das bedeutet, dass alle Nachkommastellen einfach abgeschnitten werden. Das führt dazu, dass das Ergebnis nicht mehr korrekt dargestellt wird.
Um dieses Problem zu beheben, führt PHP 8 Union Types ein. Das bedeutet, dass Sie mehrere Datentypen angeben können, die die Funktion oder die Methode verarbeiten sollen. Das macht es möglich, unerwünschte Daten auszuschließen. Dennoch sind Sie dabei nicht auf einen einzigen Datentyp beschränkt. Um Union Types zu erzeugen, ist es lediglich notwendig, die verschiedenen Typen durch einen senkrechten Strich voneinander zu trennen. Das obige Beispiel lässt sich dadurch beispielsweise wie folgt erweitern:
function fun (int|float $zahl)
{
return $zahl * $zahl + 2;
}
Hierbei können Sie nicht nur primitive Datentypen verwenden. Besonders hilfreich sind Union Types bei der Arbeit mit Objekten. Damit können Sie genau vorgeben, Objekte welcher Klassen die Funktion oder die Methode akzeptieren soll.
Darüber hinaus können Sie Union Types nicht nur für die Übergabewerte, sondern auch für die Rückgabewerte verwenden. Dabei müssen Sie jedoch beachten, dass sich der Typ void nicht mit anderen Datentypen verbinden lässt. Das bedeutet, dass es nach wie vor nicht möglich ist, eine Funktion oder eine Methode zu erstellen, bei der nur in manchen Fällen ein Rückgabewert auftritt, in anderen Fällen hingegen nicht.
Neuer validierter Return Type: static
Eine weitere wichtige Neuerung besteht darin, dass der Schlüsselbegriff static mit der Version PHP 8 zu einem validierten Return Type wird. Das kann wichtig sein, wenn Sie mit vererbten Methoden arbeiten.
Als Beispiel hierfür können Sie die folgende Klasse verwenden:
class Elternklasse
{
public function methode()
{
return = clone $this;
}
}
Nun können Sie eine Kindklasse davon ableiten. Da diese Klasse für das Beispiel keinen Inhalt benötigt, bleibt sie leer, obwohl dies bei einer realen Anwendung sicherlich unsinnig wäre:
class Kindklasse extends Elternklasse {}
Durch das Prinzip der Vererbung erhält die Kindklasse jedoch die Methode, die in der Elternklasse definiert ist. Das macht es möglich, ein Objekt der Kindklasse zu erzeugen und die Methode darauf anzuwenden:
$meinObjekt = new Kindklasse();
$Rueckgabewert = $meinObjekt->methode();
Der Wert, den die Methode zurückgibt und der in der Variable $Rueckgabewert aufgenommen wird, ist in diesem Fall ein Objekt der Kindklasse. Um klare Strukturen vorzugeben, ist es bei der Erzeugung der Methode jedoch sinnvoll, den Typ des Rückgabewerts anzugeben.
Nun tritt jedoch das Problem auf, dass der Typ hierbei nicht eindeutig ist. Es ist möglich, mehrere Klassen von der Elternklasse abzuleiten. Die Methode soll sich auf jede von ihnen anwenden lassen. Bei der Bestimmung des Rückgabewerts müssen Sie daher nur angeben, dass dieses Objekt genau den gleichen Typ aufweist wie das Objekt, auf das die Methode angewendet wird. Diese Vorgabe ist jedoch bislang nicht möglich.
PHP 8 führt hierfür nun den Begriff static als Rückgabewert ein. Dieser gibt an, dass das entsprechende Objekt von der gleichen Klasse abgeleitet sein muss wie das Objekt, auf das die Methode effektiv angewendet wird – im angegebenen Beispiel also der Kindklasse. Es darf sich dabei nicht um ein Objekt der Elternklasse handeln. Wenn Sie PHP 8 verwenden, können Sie diesen Begriff auf folgende Weise in die Klassendefinition einfügen:
class Elternklasse
{
public function methode(): static
{
return = clone $this;
}
}
Weak Maps für eine Reduzierung des Ressourcenbedarfs
Eine weitere Neuerung bei PHP 8 stellt die Einführung von Weak Maps dar. Diese beeinflusst das Verhalten des Garbage Collectors. Weak Maps kommen jedoch fast ausschließlich bei sehr komplexen Anwendungen zum Einsatz. Für einfachere PHP-Programme sind diese meistens nicht von Bedeutung. Dennoch sollen die wesentlichen Grundzüge hier kurz dargestellt werden.
PHP verfügt über einen Garbage Collector. Diese Funktion bewirkt, dass Objekte, die im Programm nicht mehr zum Einsatz kommen, gelöscht werden. Das führt zu einer einfacheren Programmgestaltung, da der Programmierer diese Aufgabe nicht selbst erledigen muss. Dennoch wird dadurch verhindert, dass das Programm unnötigen Speicherplatz beansprucht.
Bei manchen Anwendungen ist es sinnvoll, ein Cache zu erstellen, um die Performance bei der Ausführung zu verbessern. Darin wird eine Referenz zu dem entsprechenden Objekt gespeichert. Bei den bisherigen PHP-Versionen tritt nun jedoch das Problem auf, dass der Garbage Collector ein Objekt nur dann löschen kann, wenn es keinen Verweis mehr auf dieses gibt. Bei der Verwendung eines Caches bleibt die Referenz jedoch häufig bestehen, obwohl das Objekt nicht mehr verwendet wird. Das verhindert die Löschung.
Die Einführung von Weak Maps ermöglicht es nun, Verweise zu verwenden, die den Garbage Collector nicht davon abhalten, das entsprechende Objekt zu löschen. Das führt zu einer deutlich effizienteren Nutzung des Arbeitsspeichers und damit zu einer besseren Performance.
Vereinheitlichung der Syntax bei Ausgabe der Klassennamen
Seit PHP 5.5 ist es möglich, den Namen einer Klasse als String auszugeben, indem man den Begriff ::class an den Namen der Klasse anhängt. Dieses Verhalten erscheint in vielen Fällen jedoch etwas unlogisch: Wenn man den Klassennamen bereits kennt, ist es nicht erforderlich, ihn mit diesem Ausdruck erneut zu ermitteln.
Aus diesem Grund gehen viele Programmierer beim ersten Kontakt mit dieser Funktionalität davon aus, dass diese dazu dient, den Klassennamen eines Objekts zu ermitteln, beispielsweise auf die folgende Weise: $meinObjekt::class.
Das war bislang jedoch nicht möglich. Der Ausdruck ::class ließ sich lediglich auf Klassennamen anwenden. Die Verwendung ist nur dann sinnvoll, wenn Sie mit Namensräumen arbeiten. In diesem Fall führt dieser Begriff dazu, dass neben der Klasse auch der zugehörige Namensraum angezeigt wird.
Da diese Funktionsweise jedoch bisher für einige Verwirrung sorgte, nimmt PHP 8 hierbei nun eine Anpassung vor. Fortan ist es möglich, mit diesem Begriff den Klassennamen eines Objekts anzuzeigen – so wie im oben dargestellten Beispiel.
Einfache Konvertierung zwischen verschiedenen Datums- und Zeitangaben
Eine weitere kleine Neuerung betrifft die Konvertierungsmöglichkeiten zwischen Datums- und Zeitangaben. PHP unterstützt hierbei viele unterschiedliche Typen. Die Neuerung ist jedoch nur für Datumsangaben der Typen DateTime und DateTimeImmutable gültig. Diese sind genau gleich aufgebaut. Zwischen ihnen besteht lediglich der Unterschied, dass der erste Typ veränderbar ist und der zweite Typ nicht.
Bislang war es nicht möglich, eine Datumsangabe des Typs DateTime in den Typ DateTimeImmutable zu konvertieren. Auch die umgekehrte Abwandlung war nicht erlaubt. PHP 8 gibt Ihnen fortan jedoch diese Möglichkeiten.
Änderungen bei Arrays mit negativem Index
PHP ist eine der wenigen Programmiersprachen, die es erlaubt, Arrays mit einem negativen Index zu erstellen. Sie können beim Erzeugen eines Arrays stets den Wert für den Startpunkt festlegen. Hierbei sind auch negative Werte erlaubt.
Allerdings kam es hierbei bislang zu einer unterbrochenen Indexierung. Das erste Feld erhielt zwar einen negativen Index. Beim zweiten Feld wurde dann jedoch der Wert 0 verwendet. Wenn Sie beispielsweise ein Array mit 4 Feldern erstellen und dabei den Startindex -6 vorgeben, erhalten Sie ein Array mit den Feldern -6, 0, 1 und 2.
PHP 8 ändert dieses Verhalten nun. Fortan kommt es auch bei der Verwendung eines negativen Werts für den Startindex zu einer kontinuierlichen Nummerierung. Wenn Sie wieder -6 als Startwert angeben, nehmen die weiteren Felder die Positionen -5, -4 und -3 ein.
Constructor Property Promotion
Die Constructor Property Promotion stellt eine Anpassung der Syntax dar, die die Programmerstellung erleichtern und beschleunigen soll. Diese Neuerung ist dann nützlich, wenn Sie eine Klasse mit sogenannten Promoted Parameters verwenden – wenn Sie den Attributen also Sichtbarkeitsmerkmale wie public, private oder protected zuweisen.
Der bisherigen Syntax entsprechend müssen Sie diese Merkmale an mehreren Stellen angeben. Das stellt einen erheblichen Aufwand dar. Außerdem ist es unnötig, da es nach der einmaligen Nennung ohnehin nicht mehr möglich ist, andere Werte vorzugeben.
Daher ist es fortan nur noch notwendig, diese Angaben ein einziges Mal im Konstruktor durchzuführen – nach dem folgenden Muster:
class Elternklasse
{
public function methode(): static
{
return = clone $this;
}
}
Neue Funktion str_contains()
PHP 8 führt die neue Funktion str_contains() ein. Diese ermöglicht es, herauszufinden, ob eine bestimmte Zeichenfolge in einer anderen Zeichenkette enthalten ist. Sie gibt eine boolesche Variable zurück.
Bisher kam in PHP zu diesem Zweck die Funktion strpos() zum Einsatz. Diese gibt die Position des ersten Auftretens der Zeichenfolge an, wenn diese in der entsprechenden Zeichenkette enthalten ist. Kommt sie nicht darin vor, gibt sie den Wert false zurück.
Theoretisch lässt sich daher damit genau die gleiche Funktionsweise wie bei der Verwendung der neuen Funktion str_contains erzielen. Allerdings kam es hierbei häufig zu Problemen. Die Ursache dafür besteht darin, dass der Wert 0 in PHP dem booleschen Wert für false entspricht. Wenn sich die gesuchte Zeichenfolge ganz am Anfang befindet, wird die Position 0 zurückgegeben. Das kann je nach gewählter Darstellung zu einer Verwechslung mit dem Wert false führen. Daher haben die PHP-Entwickler beschlossen, eine neue Funktion für diese Aufgabe bereitzustellen.
Major Update: PHP 8 ist nicht abwärtskompatibel
Das Update auf PHP 8 ist ein sogenanntes Major Update, was bedeutet, dass es umfangreiche Änderungen mit sich bringt und nicht abwärtskompatibel ist. Anders als bei kleineren Updates, die ältere Programme weiterhin unterstützen, kann PHP 8 bestimmte ältere Code-Elemente nicht mehr ausführen.
Abwärtskompatibilität und Major Updates
Bei den meisten Programmiersprachen-Updates achten Entwickler auf Abwärtskompatibilität, sodass auch Programme aus älteren Versionen weiterhin funktionieren. Major Updates wie PHP 8 gehen jedoch weiter: Sie erweitern nicht nur die Funktionen, sondern beheben auch alte Fehler und Probleme. Dies kann dazu führen, dass Code, der zuvor ausführbar war, nun Fehlermeldungen erzeugt oder gar nicht mehr funktioniert.
Beispiel für Inkompatibilität: Geänderte Signaturen bei Methodenüberschreibungen
Ein Beispiel für solche Inkompatibilitäten betrifft die Signaturen von Methoden. In PHP 8 führt eine abweichende Datentyp-Signatur beim Überschreiben einer Methode zu einer Fehlermeldung, während in älteren Versionen nur eine Warnung angezeigt wurde.
Wichtige Änderungen und veraltete Befehle
Einige Befehle und Funktionen, die in früheren PHP-Versionen erlaubt waren, sind in PHP 8 nicht mehr zulässig. Nachfolgend eine Übersicht der wichtigsten Änderungen:
- Reservierte Schlüsselwörter:
matchist jetzt ein reserviertes Wort und kann nicht mehr als Bezeichner verwendet werden. - Konstruktor-Namen: Konstruktoren müssen nun zwingend
__construct()heißen; Klassennamen als Konstruktoren werden nicht mehr unterstützt. - Statische Aufrufe: Methoden, die nicht als
staticgekennzeichnet sind, können nicht mehr in einem statischen Kontext aufgerufen werden. - Konstanten-Namensgebung: Die Funktion
define()erlaubt keine Groß- und Kleinschreibung mehr für Konstantenbezeichner (das dritte Argument darf nicht mehrtruesein). - Veraltete Funktionen:
create_function(),each()und die Verwendung vonarray_key_exists()bei Objekten sind nicht mehr zulässig. - Nutzung von
parentin Klassen ohne Eltern: Der Aufruf vonparentin Klassen ohne Eltern führt jetzt zu einem Fehler.
Diese Änderungen bedeuten, dass bestehende Programme vor einem PHP-8-Upgrade auf ihre Kompatibilität geprüft und gegebenenfalls angepasst werden müssen, um eine reibungslose Ausführung sicherzustellen.
Was müssen Webseitenbetreiber beachten?
Die bisherigen Abschnitte in diesem Artikel haben die Änderungen, die PHP 8 mit sich bringt, ausführlich beschrieben. Wenn Sie selbst Programme mit PHP erstellen, sind diese Informationen sehr hilfreich, um Ihre Erzeugnisse an diese Änderungen anzupassen.
Allerdings gibt es auch viele Webseitenbetreiber, die selbst über keine Programmierkenntnisse verfügen und denen es daher schwerfällt, die Auswirkungen dieser Überarbeitung einzuordnen. Diese betrachten das Erscheinen neuer PHP Versionen häufig mit Sorge und wissen nicht, wie sie darauf reagieren sollen. Daher stellt der letzte Abschnitt dieses Artikels kurz vor, welche Auswirkungen das Erscheinen von PHP 8 auf Ihre Website haben wird.
Kann ich nach dem Release sofort auf PHP 8 umsteigen?
Welche Maßnahmen Sie ergreifen können oder sollen, hängt zunächst von Ihrem Hosting-Anbieter ab. Dieser ist für die Einrichtung der Server-Infrastruktur zuständig. Erst, wenn der Anbieter PHP 8 auf seinem Server freigibt, können Sie die neue Technik nutzen.
Die neue Version wurde zwar am 26. November 2020 veröffentlicht. Das heißt jedoch nicht, dass alle Anbieter diese unverzüglich zur Verfügung stellten. Wenn Sie auf die Angebote bei Domaintechnik® zugreifen, werden Sie jedoch zu den ersten Anwendern gehören, die immer die neuesten PHP VersionenPHP-Versionen Frei wählbar mit dem Modul Entwicklung im Hosting Control Panel nutzen können. Durch das selbst entwickelte Control Panel ist es möglich, die neue Technik besonders schnell umzusetzen.
Hosting mit aktuellen PHP Versionen:
Die neue Version wurde zwar am 26. November 2020 veröffentlicht. Das heißt jedoch nicht, dass alle Anbieter diese unverzüglich zur Verfügung stellten. Wenn Sie auf die Angebote bei Domaintechnik® zugreifen, werden Sie jedoch zu den ersten Anwendern gehören, die immer die neuesten PHP Versionen nutzen können. Durch das selbst entwickelte Control Panel ist es möglich, die neue Technik besonders schnell umzusetzen.
Muss ich zwingend auf PHP 8 umsteigen?
Selbst wenn PHP 8 bereits verfügbar ist, bedeutet das noch nicht, dass Sie aktiv werden müssen. Der Umstieg erfolgt freiwillig. Wenn Sie nichts ändern möchten, ist keinerlei Anpassung notwendig. Auf diese Weise nutzen Sie auch weiterhin Ihre bisherige PHP-Version, sodass Ihre Programme korrekt ausgeführt werden. Solange der Support hierfür noch nicht ausgelaufen ist, stellt dies kein Problem dar.
Der aktive Support für die aktuelle PHP-Version 7.4 endete beispielsweise im November 2021. Danach erschienen noch für ein weiteres Jahr Sicherheits-Updates. Während dieser Zeitspanne ist die Nutzung weiterhin möglich. Erst danach ist es geboten, auf eine neuere Version umzusteigen.
Allerdings ist es empfehlenswert, den Wechsel so früh wie möglich in Angriff zu nehmen. Auf diese Weise profitieren Sie von der verbesserten Performance des PHP-Interpreters. Das führt zu schnelleren Ladezeiten. Davon profitieren nicht nur Ihre Besucher. Darüber hinaus kann sich dies positiv auf die Position Ihrer Seite in den Suchergebnissen auswirken.
Wie kann ich meine PHP-Version ändern?
Wie kann ich meine PHP-Version ändern?
Wenn Sie sich zu diesem Schritt entscheiden, können Sie die verwendete PHP-Version ganz einfach in Ihrem Control Panel umstellen. Allerdings ist es zuvor wichtig, Ihre Website einer intensiven Überprüfung zu unterziehen. Wie bereits gesagt, ist PHP 8 nicht abwärtskompatibel. Das bedeutet, dass eventuell Fehler auftreten, wenn Sie Ihr System ohne Anpassungen auf PHP 8 umstellen.
Wenn Sie ein vorgefertigtes CMS-System wie WordPress verwenden, sollten Sie zuvor die Systemvoraussetzungen beim Hersteller prüfen. Nachdem Sie alle Updates und ein Backup vorgenommen haben, müssen Sie hier lediglich Ihre Version aktualisieren. Diese sollte dann bereits an PHP 8 angepasst sein.
Verwenden Sie hingegen eine individuell erstellte Software, ist es empfehlenswert, diese durch einen Experten prüfen zu lassen. Auf diese Weise stellen Sie sicher, dass Sie von den Vorteilen der neuen Technik profitieren, ohne dass es dabei zu Fehlern kommt.