PHP 7 ist in aller Munde und kommt mit einer Reihe syntaktischer Verbesserungen und neuen Features herbei. In Zukunft sind PHP-Applikationen nicht nur schneller, sondern nähern sich dem Java-Syntax weiter an. Endlich kann man festlegen, welche Datentypen in Funktionen herein und welche wieder heraus kommen sollen (Parameter Type Declarations und Return Type Declarations), wodurch die Wartbarkeit des Codes verbessert werden kann.
Parameter Type Declarations und Return Type Declarations
In PHP >=5.3. war es schon früher möglich Funktionsparametern, einer Input Variablen einen Objekttyp zuzuweisen, den die Funktion erwartet hat, um anderen Programmierern die Verwendung der Funktion zu erleichtern/zu dokumentieren und eine Exception zu generieren, wenn ein Objekt eines anderen Typs verwendet wird:
function test(MyObject $myObject){}
Mit PHP 7 könnnen nun auch skalare Typen als Input Parameter verwendet werden:
function test(int $myObject){}
Genauso kann auch der erwrtete Ouput der Funktion einem Typ zugeordnet werden:
function test(int $myObject) : int{ return myObject }
Skalare Datetypen sind:
- strings (
string
) - integers (
int
) - floating-point numbers (
float
) - booleans (
bool
)
Außerdem (nicht skalar)
- array
- callables
Mit Hilfe der Direktive
declare(strict_types=1);
, die am Anfang einer Datei gesetzt werden kann, wird der Strict Mode aktiviert, der sowohl das Type Checking beim Input als auch beim Output von Funktionen beeinflußt.
Beispiel Strict Mode
declare(strict_types=1); function test(string $int) : int{ $int = $int + 1; return $int ; }
1. Mit aktiviertem Strict Mode am Anfang der Datei, wird eine Exception geworfen:
test(2);
Type error: Argument 1 passed to test() must be of the type string, integer given
2. Ohne Strict Mode läuft wird der Code akzeptiert ohne Exception, Bsp::
Null Coalesce Operator ??
Der Operator kürzt die lästige Doppelung im Syntax noch weiter ab und ist super praktisch.
// Pre PHP 7 code $var = isset($_GET['foo']) ? $_GET['foo'] : 'bar'; // PHP 7+ code $var = $_GET['foo'] ?? 'bar';
Deserialisierung von Objekten mittels einer White List
// converts all objects into __PHP_Incomplete_Class object except those of MyClass and MyClass2 $data = unserialize($foo, ["allowed_classes" => ["MyClass", "MyClass2"]);
Weiter zu PHP 7 – die neuen Funktionen im Überblick – Teil 2