JEB Web Blog

web developer news

PHP 7 – Neue Features

PHP 7 hat neben der Optimierung der Performance einige neue Features im Programm.
Zu diesen gehören:

Skalare Typendeklarationen
Skalare Typendeklarationen kommen in zwei Varianten: coercive (eingeschränkt / Defaultwert) und strict. Die folgenden Parametertypen können nun vorgegeben werden: Strings (string), Integers (int), Floating Point Numbers (float), und Booleans (bool). Sie erweitern die Typen welche bereits mit PHP 5 eingeführt wurden: Klassen, Interfaces, Arrays und Callables.
Um den strict mode einzuschalten muss eine einzelne Anweisung am Dateianfang stehen. Das bedeutet, dass die Striktheit der Skalaren-Typisierung auf diese eine Datei beschränkt ist. Diese Direktive bezieht sich nicht nur auf Parametertypen, sondern auch auf den Rückgabewert von Funktionen.

Deklaration des Return Types
PHP 7 unterstützt die Deklaration des Rückgabewerts. Ähnlich der Argument Type Deklaration spezifiziert die Returntyp Deklaration den Typ eines Werts der von einer Funktion zurückgegeben wird. Es sind die dieselben Typen für Return und Argument Type Deklarationen verfügbar.

Null Coalescing Operator
Der Null Coalescing Operator „??“ wurde als syntaktisches „Zuckerl“ eingeführt, wenn ein ternärer Operator in Verbindung mit isset() gebraucht wird. Der erste Operand wird zurückgegeben falls vorhanden und ungleich NULL; anderfalls der zweite Operand.

Spaceship Operator
Der Spaceship Operator „<=>“ dient dem Vergleich zweier Ausdrücke. Er gibt -1, 0 oder 1 zurück wenn $a jeweils kleiner als, gleich oder größer als $b ist. Vergleiche werden gemäß den in PHP üblichen Regeln ausgeführt.

Konstanten Arrays mittels define()
Array Konstanten können nun per define() definiert werden. In PHP 5.6 war dies nur mit const möglich.

Anonyme Klassen
Anonyme Klassen werden nun durch „new class“ unterstützt. Diese können statt vollständiger Klassendefinitionen für „Wegwerf“-Objekte genutzt werden.

Unicode Codepoint Escape Syntax
Diese überführt ein Unicode Zeichen in die hexadezimale Form und gibt das UTF-8 Zeichen in einem String mit doppelten Anführungszeichen oder einem Heredoc aus. Es wird jedes gültige Zeichen akzeptiert, optional mit führenden 0’en.

Closure::call()
Closure::call() ist eine performantere, verkürzte Form den Geltungsbereich eines Objekts temporär an ein Closure zu binden.

Gefiltertes unserialize()
Dieses Feature strebt nach höherer Sicherheit beim deserialisieren von Objekten mit nicht vertrauenswürdigen Daten. Der Entwickler bekommt die Möglichkeit zu deserialisierende Klassen mit dem Filter „allowed_classes“ anzugeben. Dadurch werden mögliche Code Injektionen verhindert.

IntlChar
Die neue IntlChar Klasse erweitert den Funktionsumfang der ICU. Die Klasse besitzt mehrere statische Methoden und Konstanten zur Manipulation von Unicode Zeichen.

Expectations
Expectations sind rückwärtskompatible Verbesserungen der alten assert() Funktion. Sie ermöglichen Assertions zum Null-Tarif im Produktionscode und ermöglichen es eigene Exceptions zu definieren wenn die Assertion fehlschlägt.

Während die Kompatiblität der alte API weiterhin erhalten bleibt, ist assert() jetzt ein Sprachkonstrukt welches als ersten Parameter zusätzlich einen beliebigen Ausdruck zur Überprüfung akzeptiert als nur einen String oder einen Boolean Wert.

Use Deklarationen gruppieren
Klassen, Funktionen und Konstanten welche über denselben Namespace importiert werden, können jetzt mit einer einzelnen Anweisung gruppiert werden.

Generator Return Expressions
Das Return Statement kann nun auch innterhalb eines Generators benutzt werden.

Generator delegation
Generatoren können jetzt via yield from an andere Generatoren delegieren.

Integer Division mit intdiv()
Die neue intdiv() Funktion führt eine Integer Division seiner Operanden durch und gibt das Ergebnis zurück.

Session Optionen
session_start() akzeptiert jetzt ein Array mit Optionen welche die in der Datei php.ini vorgenommene Konfiguration der Session überschreiben.

preg_replace_callback_array()
Die neue Funktion preg_replace_callback_array() ermöglicht es den Code beim Verwenden der preg_replace_callback() Funktion sauberer zu schreiben.
Vor PHP 7 waren viele Callbacks regulärer Ausdrücke mit Verzweigungen „verunreinigt“.

Jetzt werden Callbacks von jedem regulären Ausdruck über ein assoziatives Array registriert, wobei der Schlüssel den regulären Ausdruck und der Wert das Callback darstellt.

CSPRNG Funktionen
Es gibt zwei neue Funktionen für das Generieren plattformübergreifender, kryptographisch sicherer Integer und Strings: random_bytes() und random_int().

list() kann nun per ArrayAccess Objekte extrahieren
Bisher war mit der Funktion list() die Verarbeitung von ArrayAccess Objekten fehleranfällig. Dies wurde gefixt.