<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>/home/antu &#187; Trinitäts-Operator</title>
	<atom:link href="http://www.antusblog.de/tag/trinitats-operator/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.antusblog.de</link>
	<description>Linux, Programmierung und andere Dinge die mich interessieren</description>
	<lastBuildDate>Mon, 26 Oct 2009 06:00:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Der Trinitäts-Operator</title>
		<link>http://www.antusblog.de/2009/10/19/der-trinitats-operator/</link>
		<comments>http://www.antusblog.de/2009/10/19/der-trinitats-operator/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 11:08:37 +0000</pubDate>
		<dc:creator>Antu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Dreifach konditionaler Operator]]></category>
		<category><![CDATA[Fragezeichenoperator]]></category>
		<category><![CDATA[Ternary-Operator]]></category>
		<category><![CDATA[Trinitäts-Operator]]></category>

		<guid isPermaLink="false">http://www.antusblog.de/?p=2087</guid>
		<description><![CDATA[Der 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 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.antusblog.de/?p=2087"><img class="alignright size-full wp-image-2100" title="Der Trinitaets Operator" src="http://www.antusblog.de/wp-content/uploads/2009/10/Der.Trinitaets-Operator.png" alt="Der Trinitaets Operator" width="150" height="150" /></a>Der 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.</p>
<p>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.</p>
<p><span id="more-2087"></span></p>
<h2>Funktionsweise</h2>
<p>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 <code>if/else</code> sparen kann, und den Variablennamen nur einmal schreiben muss, wird das ganze nicht nur kürzer, sondern auch übersichtlicher.</p>
<h3>Abfrage/Zuweisung mit if</h3>
<p>Würde man eine solche Zuweisung mit einer normalen <code>if/else</code>-Abfrage realisieren, bräuchte man 5 Zeilen. Das sähe wie folgt aus:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">if (&lt;Bedingung&gt;) {
    &lt;Variable&gt; = &lt;Wert 1&gt;;
} else {
    &lt;Variable&gt; = &lt;Wert 2&gt;;
}</pre></div></div>

<h3>Abfrage/Zuweisung mit if (verkürzt)</h3>
<p>Eine solche <code>if</code>-Abfrage lässt sich natürlich noch verkürzen. Die geschweiften Klammern können weggelassen werden, und man kann alles in eine Zeile quetschen.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">if (&lt;Bedingung&gt;) &lt;Variable&gt; = &lt;Wert 1&gt;; else &lt;Variable&gt; = &lt;Wert 2&gt;;</pre></div></div>

<h3>Abfrage/Zuweisung mit dem Trinitäts-Operator.</h3>
<p>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.</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">&lt;Variable&gt; = (&lt;Bedingung&gt;) ? &lt;Wert 1&gt; : &lt;Wert 2&gt;;</pre></div></div>

<h3>Beispiel</h3>
<p>Und noch ein Beispiel, mit richtigen Werten.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Normale Form</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$antwort1</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">42</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$antwort2</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1337</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$allesrichtig</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$allesrichtig</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Verkürzte Form</span>
&nbsp;
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$antwort1</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">42</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$antwort2</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1337</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$allesrichtig</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">else</span> <span style="color: #000088;">$allesrichtig</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Trinitäts-Operator</span>
&nbsp;
<span style="color: #000088;">$allesrichtig</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$antwort1</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">42</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$antwort2</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1337</span><span style="color: #009900;">&#41;</span> ? <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span></pre></div></div>

<p>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.</p>
<h2>Noch kürzer</h2>
<p>Seit PHP 5.3 gibt es noch eine weitere Form des Trinitäts-Operators, mit der sich manche Zuweisungen noch weiter verkürzen lassen.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>Variable<span style="color: #339933;">&gt;</span> <span style="color: #339933;">=</span> <span style="color: #339933;">&lt;</span>Variable<span style="color: #339933;">/</span>Bedingung<span style="color: #339933;">&gt;</span> ?<span style="color: #339933;">:</span> <span style="color: #339933;">&lt;</span>Wert<span style="color: #339933;">&gt;;</span></pre></div></div>

<p>Dabei wird <Variable/Bedingung> ausgewertet ob die Bedingung wahr ist, bzw. die Variable den booleschen Wert <code>true</code> hat (oder dazu umgewandelt werden kann). Ist das der Fall, bekommt die Variable den Wert der Bedingung zugewiesen, ansonsten den anderen Wert.</p>
<p>Hier noch ein Beispiel, welches das ganze vielleicht etwas besser verdeutlicht: </p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$id</span> <span style="color: #339933;">=</span> <span style="color: #339933;">@</span><span style="color: #000088;">$_GET</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'id'</span><span style="color: #009900;">&#93;</span> ?<span style="color: #339933;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span></pre></div></div>

<p>Wenn <code>$_GET['id']</code> gesetzt, und ungleich <code>0</code> ist, nimmt <code>$id</code> den Wert von <code>$_GET['id']</code> an. Ansonsten bekommt <code>$id</code> den Wert <code>0</code>. Das <code>@</code> steht da, damit PHP nicht über eine undeklarierte Variable meckert, falls <code>$_GET['id']</code> nicht gesetzt ist.</p>
<h2>Funktionen aufrufen</h2>
<p>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 <code>AND</code> verbunden werden, eine Trennung mittels Semikolon oder <code>&#038;&#038;</code> funktioniert nicht.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$allesrichtig</span> ? <span style="color: #b1b100;">print</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Alle Fragen wurden richtig beantwortet, super!&quot;</span><span style="color: #009900;">&#41;</span> AND
                <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Das Quiz ist zu Ende.&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Leider falsch!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

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

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Bitte '</span> <span style="color: #339933;">.</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$siezen</span> ? <span style="color: #0000ff;">'klicken Sie '</span> <span style="color: #339933;">:</span> <span style="color: #0000ff;">'klicke '</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'hier, '</span>
<span style="color: #339933;">.</span> <span style="color: #0000ff;">'um zur vorherigen Seite zurückzukehren'</span><span style="color: #339933;">;</span></pre></div></div>

<h2>So nicht!</h2>
<p>Der Trinitäts-Operator kann zwar verschachtelt werden, davon rate ich aber ab. Solche Zuweisungen werden schnell sehr unübersichtlich.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Unübersichtlich:</span>
<span style="color: #000088;">$allesrichtig</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$antwort1</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">42</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$antwort2</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1337</span><span style="color: #009900;">&#41;</span> ? <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$antwort3</span> <span style="color: #339933;">&gt;</span> <span style="color: #000088;">$antwort4</span><span style="color: #009900;">&#41;</span> ?
                <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span> <span style="color: #339933;">===</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> ? <span style="color: #009900; font-weight: bold;">true</span> <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span></pre></div></div>

<h2>Beispiel-Datei</h2>
<p>Eine Beispieldatei, mit allen möglichen Formen der Verwendung des Trinitäts-Operators habe ich auch noch erstellt: <a href="/demos/11-der-trinitaets-operator/Beispiel.phps">Beispiel.phps</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.antusblog.de/2009/10/19/der-trinitats-operator/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

