PHP Coding Standard

Logo: PHP
24. Regel 21: Trinitäts-Operatoren dürfen nicht verschachtelt werden

Nach Möglichkeit sollten Trinitäts-Operatoren (englisch: ternary operator) in eine Zeile passen. Komplexe Bedingungen sind demnach zu vermeiden. Ein Trinitäts-Operator darf nicht verschachtelt werden.

Ungültig
   $value = (!($some_complicated_value xor function_with_unknown_return_value())
   and !$different_settings) ? $w0Ot->noComments($x) : $wO0t->noComments($y);

   $value = (function_returning_true())
      ? $number = (0) ? 1 : $else_or_what
      : $different_number = (1) ? 3 : 4;

   $value = (function_returning_false()) ? $number = (0) ? 1 : $else_or_what : $different_number
   = (1) ? 3 : 4;

Na, welchen Wert hat "$value"? Selbst wenn jemand in weniger als 10 Sekunden die Frage beantworten kann, darf solcher Code nicht verwendet werden. Theoretisch ist es möglich eine Menge solcher Trinitäts-Operatoren zu verschachteln, aber selbst zwei oder drei Ebenen sind schon unübersichtlich, wie man an dem Beispiel oben auch sehen kann.

Gültig
   // it is better to use an if statement
   if (function_returning_false())
   {
      $number = (0) ? 1 : $else_or_what;
      $value = $number;
   }
   else
   {
      $different_number = (1) ? 3 : 4;
      $value = $different_number;
   }

Wenn sehr komplizierte Vergleiche in einer IF-Struktur gemacht werden sollen, die auch in einem Trinitäts-Operator möglich wären, muss auf jeden Fall eine übersichtliche Syntax verwendet werden. Man sollte jedoch eher den Kontrollstrukturen SWITCH und/oder IF den Vorzug geben. Gegen einfache Trinitäts-Operatoren ist jedoch nichts einzuwenden. Manchmal unterstützen sie sogar das Prinzip der Einfachheit.