Der Trinitäts-Operator

Der Trinitaets OperatorDer Trinitäts-Operator kann verwendet werden, um Zuweisungen/Funktionsaufrufe in Verbindung mit einer Bedingung bzw. Abfrage stark zu verkürzen. Richtig eingesetzt erhöht er die Lesbarkeit des Quelltextes und vermindert die Schreibarbeit.

In diesem Artikel wird erklärt, wie der Trinitäts-Operator (engl. Ternary Operator, auch Fragezeichenoperator oder dreifach konditionaler Operator genannt) funktioniert, und wie man ihn richtig anwendet.

Funktionsweise

Der Trinitäts-Operator stellt im Grunde eine Fallunterscheidung in Verbindung mit einer Zuweisung oder einem Funktionsaufruf dar. Man möchte einer Variablen entweder Wert 1, oder Wert 2 zuweisen, abhängig von einer Bedingung. Oder: Man möchte, abhängig von einer Bedingung entweder Funktion X oder Funktion Y aufrufen. Dadurch, dass man sich das if/else sparen kann, und den Variablennamen nur einmal schreiben muss, wird das ganze nicht nur kürzer, sondern auch übersichtlicher.

Abfrage/Zuweisung mit if

Würde man eine solche Zuweisung mit einer normalen if/else-Abfrage realisieren, bräuchte man 5 Zeilen. Das sähe wie folgt aus:

if (<Bedingung>) {
    <Variable> = <Wert 1>;
} else {
    <Variable> = <Wert 2>;
}

Abfrage/Zuweisung mit if (verkürzt)

Eine solche if-Abfrage lässt sich natürlich noch verkürzen. Die geschweiften Klammern können weggelassen werden, und man kann alles in eine Zeile quetschen.

if (<Bedingung>) <Variable> = <Wert 1>; else <Variable> = <Wert 2>;

Abfrage/Zuweisung mit dem Trinitäts-Operator.

Mit dem Trinitäts-Operator wird die Zuweisung dann noch kürzer, und wenn man den Trinitäts-Operator kennt, ist auch sofort ersichtlich, was diese Zeile tut.

<Variable> = (<Bedingung>) ? <Wert 1> : <Wert 2>;

Beispiel

Und noch ein Beispiel, mit richtigen Werten.

// Normale Form
 
if ($antwort1 == 42 && $antwort2 == 1337) {
    $allesrichtig = true;
} else {
    $allesrichtig = false;
}
 
// Verkürzte Form
 
if ($antwort1 == 42 && $antwort2 == 1337) $allesrichtig = true; else $allesrichtig = false;
 
// Trinitäts-Operator
 
$allesrichtig = ($antwort1 == 42 && $antwort2 == 1337) ? true : false;

Man schreibt also zuerst die Bedingung (in Klammern), dann ein Fragezeichen und den Wert den die Variable annehmen soll, wenn die Bedingung wahr ist, dann einen Doppelpunkt, und den Wert für den Fall das die Bedingung unwahr ist.

Noch kürzer

Seit PHP 5.3 gibt es noch eine weitere Form des Trinitäts-Operators, mit der sich manche Zuweisungen noch weiter verkürzen lassen.

<Variable> = <Variable/Bedingung> ?: <Wert>;

Dabei wird ausgewertet ob die Bedingung wahr ist, bzw. die Variable den booleschen Wert true hat (oder dazu umgewandelt werden kann). Ist das der Fall, bekommt die Variable den Wert der Bedingung zugewiesen, ansonsten den anderen Wert.

Hier noch ein Beispiel, welches das ganze vielleicht etwas besser verdeutlicht:

$id = @$_GET['id'] ?: 0;

Wenn $_GET['id'] gesetzt, und ungleich 0 ist, nimmt $id den Wert von $_GET['id'] an. Ansonsten bekommt $id den Wert 0. Das @ steht da, damit PHP nicht über eine undeklarierte Variable meckert, falls $_GET['id'] nicht gesetzt ist.

Funktionen aufrufen

Der Trinitäts-Operator kann auch in Verbindung mit Funktionsaufrufen verwendet werden. Dabei ist es auch möglich mehrere Funktionen aufzurufen. Von letzterem rate ich allerdings ab, in den meisten Fällen wird das schnell unübersichtlich. Wie es funktioniert erkläre ich allerdings trotzdem: Um mehrere Funktionen im Trinitäts-Operator zu verwenden, müssen diese mittels AND verbunden werden, eine Trennung mittels Semikolon oder && funktioniert nicht.

$allesrichtig ? print("Alle Fragen wurden richtig beantwortet, super!") AND
                die("Das Quiz ist zu Ende.") : die("Leider falsch!");

Es ist übrigens auch möglich, den Trinitätsoperator innerhalb von Zeichenketten zu verwenden:

echo 'Bitte ' . ($siezen ? 'klicken Sie ' : 'klicke ') . 'hier, '
. 'um zur vorherigen Seite zurückzukehren';

So nicht!

Der Trinitäts-Operator kann zwar verschachtelt werden, davon rate ich aber ab. Solche Zuweisungen werden schnell sehr unübersichtlich.

// Unübersichtlich:
$allesrichtig = ($antwort1 == 42 && $antwort2 == 1337) ? (($antwort3 > $antwort4) ?
                ((0 === 0) ? true : false) : false) : false;

Beispiel-Datei

Eine Beispieldatei, mit allen möglichen Formen der Verwendung des Trinitäts-Operators habe ich auch noch erstellt: Beispiel.phps

Informationen

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne (1 Bewertungen, Durchschnitt: 5.00 von 5)
Loading ... Loading ...
Kategorie: PHP
Ansichten: 1,962

Kommentare

Bisher wurde ein Kommentar geschrieben.

  • Jan sagt:

    Du hast noch eine weitere Möglichkeit des Einsatzes übersehen. Ich finde es zwar gerade auf php.net nicht, aber soweit ich mich erinnere geht auch folgendes:

    [Bedingung] ? [Variable 1] = [Wert 1] : [Variable 2] = [Wert 2];

    Ist aber vermutlich eher ein Sonderfall.

Kommentar schreiben

XHTML: Folgende Elemente sind erlaubt: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

Angetrieben durch Wordpress Thema erstellt von Antu