Neue Features
 
  Deklaration skalarer Typen
  
   Für die
   Deklaration des Typs von
   Skalaren gibt es zwei Möglichkeiten: erzwungen (Standard) und strikt. Die
   folgenden Typen können nun für Parameter erzwungen werden: Zeichenketten
   (string), Ganzzahlen (int), Gleitkommazahlen
   (float), und Booleans (bool). Sie ergänzen
   die anderen in PHP 5 eingeführten Typen: Klassennamen, Schnittstellen,
   array und callable.
  
  
  
   Um den strikten Modus zu aktivieren, muss am Anfang der Datei eine einzelne
   declare-Direktive stehen. Das bedeutet, dass die Strenge der Typisierung
   für Skalare für jede Datei einzeln festgelegt wird. Diese Anweisung wirkt
   sich nicht nur auf die Typ-Deklarationen von Parametern aus, sondern auch
   auf den Rückgabetyp von Funktionen (siehe
   Deklaration des Rückgabetyps),
   auf eingebaute PHP-Funktionen und auf Funktionen von geladenen Erweiterungen.
  
  
   Eine vollständige Dokumentation und Beispiele für die Deklaration von
   Skalartypen ist im Abschnitt über die
   Deklaration des Typs
   zu finden.
  
  
 
  Deklaration des Rückgabetyps
  
   PHP 7 unterstützt die
   Deklaration des Rückgabetyps.
   Ähnlich wie bei der
   Deklaration des Parameter-Typs
   gibt die Deklaration des Rückgabetyps den Typ des Wertes an, der von einer
   Funktion zurückgegeben wird. Für die Deklaration des Rückgabetyps stehen
   dieselben Typen zur
   Verfügung wie für die Deklaration des Parameter-Typs.
  
  
  
   Eine vollständige Dokumentation und Beispiele für die Deklaration des
   Rückgabetyps ist im Abschnitt über die
   Deklaration des Rückgabetyps
   zu finden.
  
  
 
  Null-Koaleszenz-Operator
  
   Der null-Koaleszenz-Operator (etwa: Operator für die Kombination mit null)
   ?? wurde als syntaktische Vereinfachung hinzugefügt für
   den häufigen Fall, dass ein ternärer Operator in Verbindung mit
   isset() verwendet wird. Er gibt seinen ersten Operanden
   zurück, wenn er existiert und nicht null ist; andernfalls gibt er seinen
   zweiten Operanden zurück.
  
  
  
  
 
  Raumschiff-Operator (Spaceship)
  
   Der Raumschiff-Operator wird für den Vergleich zweier Ausdrücke verwendet.
   Er gibt -1, 0  oder 1 zurück, wenn $a kleiner, gleich
   oder größer ist als $b. Vergleiche werden gemäß den
   üblichen Regeln für
   Typenvergleiche in PHP
   durchgeführt.
  
  
  
  
 
  Definieren von Array-Konstanten mit define()
  
   Es ist nun möglich, Array-Konstanten mit
   define() zu definieren. Bis zu PHP 5.6 konnten
   Array-Konstanten nur mit const definiert werden.
  
  
  
 
  Anonyme Klassen
  
   Mit new class wurde die Unterstützung für anonyme Klassen
   hinzugefügt. Dies kann anstelle von vollständigen Klassendefinitionen
   verwendet werden für Objekte, die nur einmal benötigt werden:
  
  
  
   Die vollständige Dokumentation befindet sich im Abschnitt
   Anonyme Klassen.
  
  
 
  Syntax für die Maskierung von Unicode-Codepunkten
  
   Diese Syntax nimmt einen Unicode-Codepunkt in hexadezimaler Form und gibt
   diesen Codepunkt in UTF-8 in eine Zeichenkette mit doppelten
   Anführungszeichen oder einen Heredoc aus. Jeder gültige Codepunkt wird
   akzeptiert, wobei führende Nullen optional sind.
  
  
  
 
  
  
   Die Methode Closure::call() ist ein
   leistungsfähigerer und kürzerer Weg, um den Gültigkeitsbereich eines
   Objekts vorübergehend an eine Closure zu binden und diese aufzurufen.
  
  
  
 
  
  
   Dieser Mechanismus soll zusätzliche Sicherheit beim Deserialisieren von
   Objekten aus nicht vertrauenswürdigen Daten bieten. Durch die Definition
   einer Whitelist für Klassen, die deserialisiert werden dürfen, können
   Angriffe durch Code-Injection verhindert werden.
  
  
  
 
  
  
   Die neue Klasse IntlChar wurde hinzugefügt, um
   zusätzliche Funktionalitäten von ICU zu nutzen. Die Klasse selbst definiert
   eine Reihe von statischen Methoden und Konstanten, die zur Bearbeitung von
   Unicode-Zeichen verwendet werden können.
  
  
  
   Um diese Klasse verwenden zu können, muss die Erweiterung
   Intl installiert sein.
  
  
 
  Expectations (Annahmen)
  
   Die Expectations sind eine abwärtskompatible Weiterentwicklung der alten
   Funktion assert(). Sie ermöglichen Assertions ohne
   Leistungsverluste im Produktionscode und bieten die Möglichkeit,
   benutzerdefinierte Exceptions auszulösen, wenn eine Assertion fehlschlägt.
  
  
   Während die alte API aus Kompatibilitätsgründen beibehalten wird, ist
   assert() nun ein Sprachkonstrukt, das es ermöglicht,
   dass der erste Parameter ein Ausdruck sein kann und nicht nur ein
   auszuwertender string-Wert oder ein zu testender
   bool)-Wert.
  
  
  
   Alle Details zu diesem Feature, einschließlich der Konfiguration sowohl in
   Entwicklungs- als auch in Produktionsumgebungen, befinden sich auf der
   Handbuchseite des Sprachkonstrukts assert().
  
  
 
  Zusammengefasste use-Deklarationen
  
   Klassen, Funktionen und Konstanten, die aus demselben namespace
   importiert werden, können nun in einer einzigen use-Anweisung
   zusammengefasst werden.
  
  
  
 
  Generatoren können Werte zurückgeben
  
   Dieses Feature baut auf der Generator-Funktionalität auf, die in PHP 5.5
   eingeführt wurde. Sie ermöglicht es, eine return-Anweisung
   innerhalb eines Generators zu verwenden, damit der Wert eines Ausdrucks
   zurückgegeben werden kann (eine Rückgabe per Referenz ist nicht erlaubt).
   Dieser Wert kann mit der neuen Methode
   Generator::getReturn() abgerufen werden, die erst
   verwendet werden darf, nachdem der Generator die Ausgabe von Werten
   abgeschlossen hat.
  
  
  
   Die Möglichkeit, den Endwert eines Generators explizit zurückzugeben, ist
   sehr nützlich. Dadurch kann der Client-Code, der den Generator ausführt,
   den letzten vom Generator zurückgegebenen Wert (das Ergebnis einer
   Berechnung durch eine Art Co-Routine) als Sonderfall behandeln. Dies ist
   viel einfacher, als einen clientseitigen Code zu schreiben, der zunächst
   prüft, ob der zurückgegebene Wert der Letzte ist, und ihn dann
   gegebenenfalls als speziellen Wert behandelt.
  
  
 
  Delegierung durch Generatoren
  
   Generatoren können nun automatisch an einen anderen Generator, ein
   Traversable-Objekt oder ein Array
   delegieren, ohne dass Boilerplate (redundanter Code) in den äußersten
   Generator geschrieben werden muss. Dies wird durch die Verwendung des
   Konstrukts yield from erreicht.
  
  
  
 
  Ganzzahl-Division mit intdiv()
  
   Die neue Funktion intdiv() führt eine Ganzzahl-Division
   ihrer Operanden durch und gibt das Ergebnis zurück.
  
  
  
 
  Optionen für Session
  
   Die Funktion session_start() akzeptiert nun ein
   Array von Optionen. Diese überschreiben die
   Session-Konfigurationsanweisungen,
   die normalerweise in der php.ini gesetzt werden.
  
  
   Diese Optionen unterstützen nun auch
   session.lazy_write. Diese
   Option ist standardmäßig aktiviert und bewirkt, dass PHP eine Session-Datei
   nur dann überschreibt, wenn sich die Session-Daten geändert haben. Außerdem
   wurde die Option read_and_close hinzugefügt. Sie kann
   nur an session_start() übergeben werden und gibt an,
   dass die Session-Daten gelesen werden sollen und die Session dann sofort
   unverändert geschlossen werden soll.
  
  
   Um zum Beispiel
   session.cache_limiter auf
   private zu setzen und die Session nach dem Lesen sofort
   zu schließen, kann Folgendes verwendet werden:
  
  
  
 
  
  
   Wenn die Funktion preg_replace_callback() verwendet
   werden müsste, kann stattdessen mit der neuen Funktion
   preg_replace_callback_array() saubererer Code
   geschrieben werden. Vor PHP 7 musste für jeden regulären Ausdruck ein
   Callback ausgeführt werden, was dazu führte, dass die Callback-Funktion
   voller Verzweigungen sein musste.
  
  
   Nun können Callbacks für jeden regulären Ausdruck registriert werden, indem
   ein assoziatives Array verwendet wird, bei dem die regulären Ausdrücke
   die Schlüssel sind, und die Callback-Funktionen deren Werte.
  
  
 
  CSPRNG-Funktionen
  
   Zwei neue Funktionen wurden hinzugefügt, um plattformübergreifend
   kryptographisch sichere Ganzzahlen und Zeichenketten zu erzeugen:
   random_bytes() und random_int().
  
  
 
  
   list() kann nun immer Objekte entpacken, die
   ArrayAccess implementieren
  
  
   Zuvor war nicht gewährleistet, dass list() bei Objekten,
   die ArrayAccess implementieren, korrekt funktioniert.
   Dies wurde nun behoben.
  
  
 
  Andere Features
  
   - 
    
     Es wurde die Möglichkeit hinzugefügt, beim Klonen auf Klassenelemente
     zuzugreifen, z. B. (clone $foo)->bar().