Top 7 Features von PHP 7.0

Es ist schon eine Weile her, dass PHP 7 releast wurde. Nun möchte ich euch in diesem Artikel trotzdem noch einmal 7 ausgewählte Funktionen von PHP 7.0 vorstellen.

1. Der Null Coalescing Operator

Google Translate schlägt für die Übersetzung den Begriff „Null-Koaleszenz-Operator“ vor, was den meisten vermutlich auch nicht sehr viel mehr sagt.

Einfach gesagt ist er eine Verkürzung der isset() Abfrage. Dazu gleich mal ein Beispiel was der Operator, eingeleitet durch ??, so kann. Bisher hätten wir folgenden Code benötigt:

$example = isset($var) ? $var : 'Variable nicht gesetzt';

Es wird überprüft ob $var initialisiert wurde. Falls ja, wird dieser Inhalt zurückgegeben und in diesem Fall $example zugewiesen. Falls nicht, wird ihr der Inhalt „Variable nicht gesetzt“ zugewiesen. Es fällt auf, dass wir $var 2-Mal erwähnen müssen. Gibt es da nicht Einsparpotenzial?

Ja, das gibt es – zumindest mit PHP 7. Da kann die Abfrage stattdessen vereinfacht werden:

$example = $var ?? 'Variable nicht gesetzt';

Es passiert genau das gleiche wie oben. Nur mit dem Unterschied, dass wir einiges an Code einsparen.

Eine sinnvolle Funktion, vor allem weil solche Abfragen in PHP Projekten sehr oft vorkommen können.

2. Spaceship Operator bzw. 3-Wege-Vergleichsoperator

Noch ein so kryptischer Name. Auch hier hinter verbirgt sich aber eine sehr hilfreiche Funktion.

Wer kennt das nicht, es sollen 2 Zahlen gegenüber gestellt werden und man will wissen, welche größer ist oder ob sie gleich groß sind.

Dank dem Spaceship Operator <=> geht das nun deutlich komfortabler:

echo 10 <=> 20;
// Gibt -1 aus, da die 1. Zahl kleiner ist

echo 20 <=> 10;
// Gibt 1 aus, da die 1. Zahl größer ist

echo 20 <=> 20;
// Gibt 0 aus, da beide Zahlen gleich groß sind

Damit lässt sich massig Schreibarbeit sparen, ein Grund weshalb diese Neuerung eines meiner Lieblingsfeatures von PHP 7 ist.

3. Arrays in define

Auch dieses Feature löst ein Problem, das vermutlich jeder Entwickler kennt, der mit PHP arbeitet. Globale Konstanten sind schön und gut, aber was ist, wenn diese einmal mehr enthalten sollen als nur bloße Strings, Integer oder ähnliches?

In PHP 7 können nun auch Arrays einer Konstante mit define() zugewiesen werden.

Das sieht zum Beispiel so aus:

define('tipps', [
    'spaceship',
    'null coalescing operator',
    'define array'
]);

echo tipps[0]; // Gibt "spaceship" aus, und das als (globale) Konstante

Oder so:

define('tipps', array(
    'spaceship' => 1,
    'null coalescing operator' => 0,
    'define array' => 1,
));

echo tipps['spaceship']; // Gibt "1" aus, und das als (globale) Konstante

4. Skalare Typ-Deklarationen

Mit sklararen Typ-Deklarationen könnt ihr als Funktionsparameter ein Array angeben, dem dann die Werte entsprechend der Typ-Deklaration – also z.B. müssen sie Integer sein bzw. werden in Integer umgewandelt – zugewiesen werden.

Das kann dann so aussehen:

function summe(int ...$zahlen) {
    return array_sum($zahlen);
}

var_dump(summe(1.2, 2, 3)); // Gibt 6 aus (denn beachte: Float-Werte werden zu Integern umgewandelt (hier wird also 1.2 umgewandelt)

Charakteristisch sind also die 3 Punkte vor dem Parameter, dem alle Werte zugewiesen werden sollen.

5.  Deklarierung der Funktionsrückgabewerte in PHP 7

Ebenfalls ganz nett ist, dass nun nach function name() per „: Typ“ der Typ des Rückgabewertes einer Funktion deklariert werden kann.

Wenn wir das in unser Beispiel von oben einbauen und den Wert als float zurückgeben möchten, kann das so aussehen:

function summe(int ...$zahlen) : float {
    return array_sum($zahlen);
}

var_dump(summe(1.2, 2, 3)); // Gibt 6 als float aus

6. Unterstützung für anonyme Klassen

Anonyme Klassen haben keinen eigenen „dauerhaften“ Namen, sondern können innerhalb eines Funktionsaufrufs z.B. als Parameter übergeben werden.

Das ist dann hilfreich, wenn diese Klasse nur einmalig verwendet werden soll.

Als Beispiel-Code verweise ich hier mal auf die PHP Dokumentation für anonyme Klassen:

// Code vor PHP 7 //
class Logger
{
    public function log($msg)
    {
        echo $msg;
    }
}

$util->setLogger(new Logger());

// Ab PHP 7.0 //
$util->setLogger(new class {
    public function log($msg)
    {
        echo $msg;
    }
});

7. Use für Gruppen von Namespaces angeben

Als letztes weise ich noch auf die erweiterten Funktionen von use hin. Auch diesmal wieder anhand eines Beispiels aus der englischsprachigen Dokumentation zu PHP 7.0:

// Vor PHP 7 //
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;

use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;

use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;

// Ab PHP 7.0 //
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};

Durch die geschweiften Klammern könnt ihr nun eine Reihe von Namespaces angeben, die verwendet werden sollen. Auch das kann einiges an Schreibarbeit sparen.

Schlussworte

Diese 7 ausgewählten Funktionen sind längst nicht alles, was PHP 7.0 zu bieten hat. Noch mehr Features findet ihr in der englischsprachigen Dokumentation.

Natürlich freue ich mich wie immer über eure Meinung: Was sind eure PHP 7 Lieblingsfeatures?