PHP: if-else mit dem Trinitäts-Operator

7 September 2009 in Code Snippets, PHP Kommentieren »

Die ganz normale if-else -Bedingung ist sicher jedem geläufig, doch nicht jeder kennt den Trinitäts-Operator, welcher die Bedingung in manchen Fällen deutlich verkürzen kann.

Nachfolgend ein erstes Beispiel, bei welchem die aktuelle Uhrzeit ermittelt und eine passende Anrede ausgewählt wird:

<?php

// Uhrzeit ermitteln (Stunden ohne führende Null)
$time date('G');

// Anrede ausgeben
if ($time 18) {
  echo 
'Guten Tag';
} else {
  echo 
'Guten Abend';
}

?>

Nun kommt der Trinitäts-Operator “?” ins Spiel, dieser ist wie folgt aufgebaut:

(Bedingung ? wenn true : wenn false)

Auf das erste Beispiel bezogen würde dies nun so aussehen:

<?php

// Uhrzeit ermitteln (Stunden ohne führende Null)
$time date('G');

// Anrede ausgeben
echo 'Guten ' . ($time 18 'Tag' 'Abend');

?>

Zuerst kommt die Bedingung mit $time < 18, ist diese wahr (true), so wird der Code vor dem Doppelpunkt verarbeitet, andernfalls der hinter dem Doppelpunkt.

Hier noch ein zweites Beispiel zur Verdeutlichung. Eine kleine Funktion, welche die größere von zwei übergebenen Zahlen ermittelt (ähnlich der Standardfunktion max()). Zuerst die normale Schreibweise:

<?php

// Eigene Max-Funktion
function my_max($a$b) {
  if (
$a $b) {
    return 
$a;
  } else {
    return 
$b;
  }
}

echo 
my_max(25); // = 5

?>

Und hier die kürzere Fassung:

<?php

// Eigene Max-Funktion
function my_max($a$b) {
  return (
$a $b $a $b);
}

echo 
my_max(25); // = 5

?>

4 Kommentare

  1. detlef sagt:

    finde ich sehr interessant und kann ich gebrauchen.
    danke!
    frage:
    kann ich die funktion verschachteln:
    echo 'Guten ' . ($time <= 18 and $time >= 10 ? 'Tag' : $time < 10 and $time >=0 ? 'Morgen' : 'Abend');

  2. detlef sagt:

    ? vergessen und

    danke!

  3. Andreas sagt:

    Hallo detlef,

    sicherlich kann dies beliebig verschachtelt werden, jedoch solltest du && als UND-Operator benutzen:

    echo 'Guten ' . ($time <= 18 && $time >= 10 ? 'Tag' : $time < 10 && $time >=0 ? 'Morgen' : 'Abend');

Einen Kommentar hinterlassen