2012-10-26 29 views
9

Funktioniert das nicht? oder mache ich es einfach falsch? Ich habe versucht, mehrere Variationen davon zu finden, und kann keine festen Informationen zu diesem Thema finden. irgendwelche Ideen?if-Anweisung in der Mitte der Verkettung?

$given_id = 1; 
while ($row = mysql_fetch_array($sql)) 
{ 
    if ($i < 10){ 
    $display = '<a href="' . $row['info'] . '" onMouseOver="' . if($row['type']=="battle"){ . 'showB' . } else { . 'showA'() . "><div class="' . $row['type'] . "_alert" . '" style="float:left; margin-left:-22px;" id="' . $given_id . '"></div></a>'; 
+0

warum wollen Sie trotzdem so unlesbaren Code schreiben? Layout den Code richtig und Sie werden wahrscheinlich den Fehler in dem Prozess beheben. Beginnen Sie mit 'sprintf' – Gordon

+0

Haben Sie keine Ahnung, warum diese Frage so geklärt war, als hätte sie etwas mit Geographie, Zeit oder einer ungewöhnlichen Situation zu tun. Die Idee des ternären Operators x? Y: z wird häufig in vielen Situationen verwendet, und ich fand diese Seite im Grunde, um herauszufinden, ob PHP diese Funktion angeboten hat. Glücklicherweise existierte diese Seite (obwohl sie geschlossen wurde) und konnte meine Anfrage lösen. – dvaey

Antwort

26

wenn ist eine selbstständige Aussage. Es ist wie eine vollständige Aussage. Sie können es also nicht zwischen Concatenation von Strings oder so verwenden. Die bessere Lösung ist die Kurz ternären operatior

(conditional expression)?(ouput if true):(output if false); 

verwenden Dies auch in Verkettung von Strings verwendet werden kann. Beispiel:

$i = 1 ; 
    $result = 'The given number is'.($i > 1 ? 'greater than one': 'less than one').'. So this is how we cuse ternary inside concatenation of strings'; 

Sie können auch verschachtelten ternären Operator verwenden:

$i = 0 ; 
    $j = 1 ; 
    $k = 2 ; 
    $result = 'Greater One is'. $i > $j ? ($i > $k ? 'i' : 'k') : ($j > $k ? 'j' :'k').'.'; 
+4

Ich denke, die Lesbarkeit der letzten Zeile ist ungefähr gleich dem Ergebnis von '(1> 2? ('X'> 'Blumen'? 0: 3): ($ j> 42? Ceil (pi()): $ Kätzchen = wahr) -1) ' – Mike

+0

-1; Was Sie in Ihren ersten paar Sätzen suchen, ist die Unterscheidung zwischen einer * Aussage * und einer * Aussage *, aber Sie verwenden stattdessen die erfundenen Begriffe "selbststehende Aussage" und "vollständige Aussage", die nicht wirklich erklären Warum kann ein 'if'-Konstrukt nicht zu einer Zeichenkette verkettet werden? –

6

if..else ist eine Aussage und kann nicht innerhalb eines Ausdruck verwendet werden. Was Sie wollen, ist der "ternäre" ?: Betreiber: http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary.

+1

Ich fühle mich wie ich gerade im Lotto gewonnen habe. – VVV

+0

Der ternäre Operator ist nett, aber er kann Code schlechter lesbar machen. Verwenden Sie es dort, wo es Sinn macht, und wenn jemand anders Ihren Code lesen möchte, sollten Sie in Betracht ziehen, ihn überhaupt nicht zu verwenden. – sgroves

+7

@VVV Sie haben einen Link zum Handbuch erhalten. Benutze es weise. – deceze

1

if eine Aussage ist. Man kann keine Aussagen in einen Ausdruck einfügen.

$str = 'foo'; 
if (cond) 
{ 
    $str .= 'bar'; 
}; 
$str .= 'baz';