2012-03-29 7 views
-8

Ich habe dieses Stück Code:Warum behandelt PHP das Dangling sonst anders?

$a = false; 
if ($a) 
    echo 'A'; if (false) echo 'B'; 
    else echo 'C'; 

Die else Aussage erscheint auf Änderungen „belongship“ je nach dem Wert von $a. Wenn es true ist, so scheint es, sie zu interpretieren als:

if ($a) 
{ 
    echo 'A'; 
    if (false) 
    { 
     echo 'B'; 
    } 
    else 
    { 
     echo 'C'; 
    } 
} 

und Drucke AC. Aber wenn $a = false, so scheint es zu interpretieren werden als:

if ($a) 
{ 
    echo 'A'; 
    if (false) 
    { 
     echo 'B'; 
    } 
} 
else 
{ 
    echo 'C'; 
} 

und Drucke C.

Fehle ich hier etwas?

+5

Es gibt keine zweideutigen Code in Ihrem ersten Beispiel – zerkms

+3

Fragen wie diese sind warum sollten Menschen Klammern in allen außer den einfachsten Situationen verwenden. (und auch dann meiner Meinung nach) – Corbin

+0

Hör auf und denke darüber aus einer staatlichen Perspektive und es wird offensichtlich, warum deine zwei Schnipsel (diejenigen, die {}) passiert sind. Das ist nicht so, wie PHP es tatsächlich sieht, das zufällig logisch dem Fluss entspricht, wie PHP es sieht (bedingt durch $ a). – Corbin

Antwort

10

Ihr erster Code liest als

$a = false; 
if ($a) { 
    echo 'A'; 
} 

if (false) { 
    echo 'B'; 
} 
else { 
    echo 'C'; 
} 

Wenn Sie keine Klammern verwenden, nur die nächste Anweisung (Anweisung, nicht Linie) als Teil dieser Kontrollstruktur ausgeführt wird. Es ist nicht mehrdeutig, da dieses Verhalten in der Programmiersprache klar definiert ist.

+0

Ich sehe. Ich verwirrte mich, indem ich mich auf etwas anderes konzentrierte. Genius. – NullUserException

3

Beide Sätze von Ergebnissen sind mit der einzigen Interpretation konsistent:

if ($a) 
{ 
    echo 'A'; 
} 
if (false) 
{ 
    echo 'B'; 
} 
else 
{ 
    echo 'C'; 
} 

So würde ich denke, das ist, was es tut.

4
$a = false; 
if ($a) 
    echo 'A'; if (false) echo 'B'; 
    else echo 'C'; 

zu

gleich
$a = false; 

if ($a) echo 'A'; 

if (false) echo 'B'; else echo 'C'; 

weil if Kontrollstruktur eine Aussage als Körper akzeptiert, finden Sie unter: http://php.net/if

Und echo 'A'; ist diese Aussage. So wird der nächste if als eigenständiges Stück Code behandelt.

2

hilft, wenn man den Einzug korrekt dh erhalten

$a = false; 

if ($a) echo 'A'; 

if (false) echo 'B'; 
else echo 'C'; 

a - falsch, Ergebnis ist C a - wahr, führen AC

Verwandte Themen