Zitat:
Zitat von Sepp Baum
Code:
<?php
$wert == 0 ? echo "wert ist 0" : echo "wert ist nicht 0";
?>
Was aber wohl funktioniert, ist folgende Code:
Code:
<?php
echo $wert == 0 ? "wert ist 0" : "wert ist nicht 0";
?>
|
Da du als Überschrift "Unterschied zwischen echo und print" genannt hast, will ich mal darauf eingehen.
Der "?:"-Operator oder auch Trinitätsoperator genannt gehört zwar zu den Vergleichsoperatoren, der Ausdruck hat aber den Anspruch etwas zurückzugeben.
Dein erstes Beispiel fungiert also wie ein einfacher Funktionsaufruf, dessen Rückgabewert man beispielsweise einer Variablen zusweisen kann. Da echo() keine Funktion ist, sondern ein Sprachkonstrukt, was keinen Rückgabewert hat (void), funktioniert das erste Beispiel nicht.
Das zweite Beispiel funktioniert deshalb, weil der Trinitätsoperator einen Wert zurückgeben kann, und zwar an das Konstrukt "echo".
Nehmen wir einmal "print". Print ist auch ein Sprachkonstrukt, hat aber einen Rückgabewert (int). Dieser ist immer 1. Deshalb würde das erste Beispiel mit "print" auch funktionieren:
Code:
<?php
$wert == 0 ? print "wert ist 0" : print "wert ist nicht 0";
?>
Der gesamte Ausdruck hätte dann in jedem Fall den Wert 1. Diesen Wert könnte man auch einer Variablen zuweisen:
Code:
<?php
$foo = ($wert == 0 ? print "wert ist 0" : print "wert ist nicht 0");
?>
$foo hätte in jedem Fall den Wert (int)1.
Wenn man eigene Funktionen definiert, dann ist es egal, ob sie explizit per return einen Wert zurückgeben oder nicht. Sollte das nicht der Fall sein, wird NULL zurückgegeben. Das ist ein Unterschied zwischen Funktionen und Sprachkonstrukten: Mit Trinitätsoperatoren können nur Sprachkonstrukte verwendet werden, die einen Rückgabewert haben.