Sven Rautenberg: 1: Instanzvariablen oder Funktionsparameter? 2: Überladene Funktionen?

Beitrag lesen

Moin!

Wo du grad dabei bist deinen Code vorzustellen interessiert mich ternary operator. sehr schön, handlich, und kompakt.

Frage: wo verwende ich einen ternary operator und wo weniger?

Du vermeidest ihn am besten.

Der ternäre Operator sieht so aus, wie ein "IF/ELSE", ist es aber nicht. Er ist eigentlich eine mathematische Funktion, genauer eine Funktion mit Fallunterscheidung: "Wenn eine Bedingung wahr ist, gibt den einen Ausdruck zurück, sonst den anderen".

$ergebnis = $bedingung ? $ausdruckWahr : $ausdruckFalsch;

Wenn dein Code, so wie oben aufgeschrieben, nicht länger als eine Zeile mit max. 80 Zeichen ist, kannst du den ternären Operator verwenden. Wenn die Zeile länger wird, nimm explizites "IF/ELSE".

Der Grund ist Lesbarkeit. Ternäre Operatoren sind extrem kompakt. Deswegen haben sie eine hohe Informationsdichte, und beim Lesen des Codes bleiben wichtige Details gerne mal unentdeckt. Obendrein ist die Evaluationsreihenfolge bei Kombination von zwei oder mehr ternären Operatoren nicht so ganz offensichtlich.

Andererseits gibt es mit PHP 7 endlich den Null-Coalesce-Operator, und der macht ganz spezifisch Dinge deutlich kompakter, die vorher zuviel Platz und Code verbraucht haben:

// php 5.6
$wert = isset($_GET['param']) ? $_GET['param'] : 'nichts';

// php 7.0
$wert = $_GET['param'] ?? 'nichts';

Sowas will man definitiv haben - es ist in Datenbanken beispielsweise auch implementiert als COALESCE()-Funktion, und liefert, von vorne nach hinten durchgesucht, den ersten Wert, der nicht NULL ist.

In PHP triggert man bei Zugriff auf nichtexistente Variablen oder Arrayindices keine Notice - das ist also ein guter Weg, um Default-Werte im Code zuzuweisen.

Grüße Sven