PHP 8: Alle Informationen zu dem neuen Update

PHP ist eine der Programmiersprachen, die am einfachsten zu lernen ist. Mit einem PHP-Tutorial und der richtigen Motivation, kann man innerhalb weniger Stunden die ersten Skripte schreiben und Befehle ausführen. PHP 7 hat  bereits eine starke Geschwindigkeitsoptimierung gebracht, die zu einem verbesserten Ranking führte. Nun hat die Open-Source-Sprache ein Major-Update auf Version 8.0 erhalten.

PHP 8: Release im November 2020

Am 26. November 2020 war es so weit: Mit dem Major-Release PHP 8.0.0 wurde die neueste Ausgabe der beliebten Skriptsprache veröffentlicht. Dies entspricht dem normalen Drei-Jahres-Zyklus bei PHP. Der Vorgänger PHP 7.4 war zuvor rund ein Jahr lang aktiv, nachdem u. a. der Support für PHP 7.1 eingestellt worden war. Auch der Support für PHP 7.2 geht Ende 2020 zu Ende.

Viele Websites, die mit PHP geschrieben wurden, setzen dennoch auf die alten Versionen. Dies ist zwar prinzipiell möglich, allerdings nicht zu empfehlen. Den Code der Website aktuell zu halten und auf neue Versionen von PHP umzusteigen bringt nämlich verschiedene Vorteile mit sich: Neue Funktionen bieten mehr Vielfalt, die Performance kann massiv gesteigert werden und Sicherheitslücken werden geschlossen.

PHP 8 schon jetzt probieren!

Sie sind noch kein IONOS Kunde? Dann buchen Sie jetzt eines unserer günstigen Webhosting-Angebote. Anschließend können Sie in Ihrem IONOS-Kundenkonto die verwendete PHP-Version ändern und zur PHP 8 wechseln.

Gibt es Komplikationen mit altem Code?

Da PHP 8 eine neue Hauptversion ist, muss man damit rechnen, dass alter Code nicht mehr kompatibel sein kann. Die meisten Änderungen, die zu Komplikationen führen könnten, waren allerdings schon in Version 7.2, 7.3 und 7.4 veraltet.

Zu den aktuellen Änderungen gehören:

  • The real type
  • Magic quotes legacy
  • array_key_exists() with objects
  • FILTER_SANITIZE_MAGIC_QUOTES filter
  • Reflection export() methods
  • mb_strrpos() with encoding as 3rd argument
  • implode() parameter order mix
  • Unbinding $this from non-static closures
  • hebrevc() function
  • convert_cyr_string() function
  • money_format() function
  • ezmlm_hash() function
  • restore_include_path() function
  • allow_url_include ini directive

Wer seinen Code bisher immer up to date gehalten hat, wird kaum Probleme haben, auch wenn das neue Update ein Major-Release ohne abwärtskompatible Änderungen ist. Eine komplette Auflistung aller Änderungen kann man auf der offiziellen PHP-Projektseite einsehen.

Hinweis

Microsoft hat bekannt gegeben, dass das Unternehmen für PHP 8 und spätere Versionen keinen Windows-Support mehr anbieten wird. Die PHP-Entwickler haben allerdings bereits angekündigt, diese Lücke selbst schließen zu wollen.

Das sind die neuen PHP-8-Features

Die neue Version von PHP birgt einige Neuerungen, die Webentwicklern viele zusätzliche Möglichkeiten bieten. Die wichtigsten Anpassungen gegenüber den Vorgängern haben wir im Folgenden für Sie zusammengefasst.

JIT Compiler

Die größte Neuerung ist der JIT Compiler, der die Performance erheblich verbessern soll. PHP wird nicht kompiliert, sondern Zeile für Zeile interpretiert. Der JIT Compiler (JIT = Just in Time) kompiliert nun Teile des Codes während der Laufzeit – und wirkt somit ganz ähnlich wie eine gecachte Version des Codes.

Dieses neue Feature in PHP 8 wurde auch bereits von Pedro Escudero eindrucksvoll getestet. Er hat ein simples Script genutzt und damit die Versionen 5.3, 7.4 und 8 (mit und ohne JIT) verglichen. Hierfür hat er das Script in jeder Version 100-mal laufen lassen und anschließend die Durchschnittszeit ermittelt.

Dabei sind folgende Durchschnittswerte entstanden:

Version Zeit in Sekunden
5.3 0.64574003219604
7.4 0.10253500938416
8 (ohne JIT) 0.098223924636841
8 (mit JIT) 0.053637981414795

Auch wenn der Wechsel von Version 7.4 zu 8 ohne JIT keinen großen Unterschied macht, so ist der Unterschied zu Version 8 mit JIT erheblich. Der JIT Compiler sorgt für ein Performance-Upgrade von mehr als 45 Prozent.

Union Types

Union Types kennt man bereits aus anderen Sprachen wie C/C++, TypeScript oder auch Haskell. Hierbei können zwei oder mehrere Typen eine Union eingehen und jeder der genannten Typen kann verwendet werden. Im Code selbst kann dies folgenderweise aussehen:

 

public function foo(Foo|Bar $input): int|float;

Es gibt jedoch eine Einschränkung, dennvoidkann nicht Teil eines Union Types werden, da es keinen Rückgabewert ausgibt. Außerdem können nullableUnions mit |null oder?geschrieben werden, wie in diesem Beispiel:

 

public function foo(Foo|null $foo): void;
public function bar(?Bar $bar): void;

Static return type

Static ist ein spezieller Klassenname und wird in der neuen Version neben self & parent zu einem validen Return Type.

WeakMap

WeakRefs wurden bereits in PHP 7.4 hinzugefügt, PHP 8 liefert mit WeakMaps die Erweiterung dieser Funktion. WeakMaps und WeakRefs können dazu genutzt werden, Objekte zu löschen, wenn nur noch der Cache auf die Entitätsklassen der Objekte referenziert. Dies führt zu einem ressourcenschonenden Umgang mit den Objekten. Ein Beispiel aus der Dokumentation:

 

class FooBar {
    private WeakMap $cache;
    public function getSomethingWithCaching(object $obj) {
        return $this->cache[$obj] ??= $this->computeSomethingExpensive($obj);
    }
    // ...
}

::class bei Objekten verwenden

In früheren Versionen musste man get_class() benutzen, um Objekten eine Klasse zuzuweisen. Nun können Sie ::class auf Objekte anwenden, was den Quelltext schlanker hält.

Stringable interface

Das Stringable interface wird automatisch zu Klassen hinzugefügt, die die __toString()-Methode implementieren. Dieser Schritt musste bisher manuell vollzogen werden. Im Code selbst sieht das dann folgendermaßen aus:

 

class Foo
{
    public function __toString(): string
    {
        return 'foo';
    }
}
function bar(Stringable $stringable) { /* … */ }
bar(new Foo());
bar('abc');

fdiv()-Funktion

Durch die neue Funktion fdiv() ist eine Division durch 0 erlaubt. Man erhält nun INF, -INF oder NAN als Rückgabewert.

Typen-Annotationen (Type annotations)

In PHP 8 werden korrekte Typen-Annotationen für alle internen Funktionen und Methoden hinzugefügt.

Typen-Fehler (Type errors)

Bisher lösten nur benutzerdefinierte Funktionen TypeErrors aus, interne Funktionen haben eine Warnung undnullausgegeben. In PHP 8 geben nun auch die meisten internen Funktionen einen Typen-Fehler aus.

Neue Klassifizierung von Engine-Warnings

Bisher gab es viele Fehler, die nur eine Warnung oder einen Hinweis ausgegeben haben. Dies wurde nun aktualisiert. Eine vollständige Auflistung der neuen PHP-Fehlermeldungen finden Sie in der Dokumentation.

@ unterdrückt fatal errors nicht mehr

Auch mit diesem neuen Feature werden Fehler aufgedeckt. Statt diese, wie bisher üblich, über den @-Operator zu unterdrücken, sollte man nun sichergehen, display_errors=Off auf dem Server eingestellt zu haben.

Korrekte Signaturen magischer Methoden

In den bisherigen PHP-Versionen war es möglich, magische Methoden mit Signaturen zu schreiben, die nicht mit der erwarteten Signatur übereinstimmen, beispielsweise __clone(): float oder __isset(): Closure. Seit der Einführung von PHP 7.0 wurde die korrekte Anwendung der magischen Methoden nur stichprobenartig überprüft. Die neue Version ist um diverse Parameter- und Rückgabewert-Checks ergänzt worden, um die Korrektheit der Signaturen sicherzustellen.

 

Reflection

Die Reflection-Signaturen wurden geändert. Ursprünglich wurde Reflection folgenderweise angegeben:

 

ReflectionClass::newInstance($args);
ReflectionFunction::invoke($args);
ReflectionMethod::invoke($object, $args);

In PHP 8 wird es nun folgendermaßen geschrieben:

 

ReflectionClass::newInstance(...$args);
ReflectionFunction::invoke(...$args);
ReflectionMethod::invoke($object, ...$args);

Um PHP 7 & PHP 8 gleichzeitig zu unterstützen, können Sie den Code folgenderweise formulieren:

 

ReflectionClass::newInstance($arg = null, ...$args);
ReflectionFunction::invoke($arg = null, ...$args);
ReflectionMethod::invoke($object, $arg = null, ...$args);
Hinweis

Am 30. November 2020 erreicht die PHP 7.2 Version das offizielle End-of-Life-Datum (EOL) und wird nicht mehr unterstützt. Mehr dazu finden Sie in unserem Artikel zu diesem Thema.


Auf dem Laufenden bleiben?

Jetzt für unseren Newsletter anmelden und gratis Online-Marketing Whitepaper für lokale Anbieter sichern!