2017-09-10 5 views
-1

Ich brauche etwas Hilfe mit der unten alternativen if-else-Syntax. Ich benutze dies sehr häufig und es funktioniert mit einer Erfolgsquote von 99,999999%. Hier , aus irgendeinem Grund, es nicht:PHP wenn ... sonst alternative Syntax werfen "unerwartet": 'in ... "Fehlermeldung

if (get_row_layout() == 'spacer') : 

    $spaceheight = get_sub_field('spacer_height'); 

    // The Alternative Syntax: if... else statement without a colon 
    // Once these two lines are removed OR changed into "if (some 
    // condition) : some stuff; endif;" syntax >> the error goes 
    // away. 
    if ($spaceheight && (0 !== $spaceheight)) 
     echo "<div class='basf-spacer' style='display: block; width: 100%; height: {$spaceheight}px; background: transparent; padding: 0; margin: 0; font-size: 0; line-height: 0;'></div>"; 

elseif (get_row_layout() == 'terms') : 

    // Some other stuff 

endif; 

Die spezifische Fehlermeldung lautet: "Parse error: syntax error, unerwartet ':' in ..."; und der Doppelpunkt ist nach der alternativen Syntax in der Zeile elseif (get_row_layout() == 'terms') : unerwartet.

Irgendeine Idee, was hier passiert?


@antoni vorgeschlagen die Antwort ist, dass alternative Syntaxen nicht gemischt werden können. Aber in diesem Fall, warum funktionierts ?:

if ($terms_primcont || $terms_seccont) : ?> 

    <div class="terms__body-wrap"> 

     <?php 
     if ($terms_primcont) echo "<div class='terms__primary'>{$terms_primcont}</div>"; 
     if ($terms_seccont) echo "<div class='terms__secondary'>{$terms_seccont}</div>"; 
     ?> 

    </div> 

<?php endif; 

Antwort

4

Dies geschieht, weil Sie verschachtelten 2 Syntaxen mischen, wenn. Wenn Sie dies tun wird es funktionieren:

<?php 
function get_row_layout(){} 

if (get_row_layout() == 'spacer') : 

    $spaceheight = get_sub_field('spacer_height'); 

    // The Alternative Syntax: if... else statement without a colon 
    // Once these two lines are removed OR changed into "if (some 
    // condition) : some stuff; endif;" syntax >> the error goes 
    // away. 
    if ($spaceheight && (0 !== $spaceheight)) : 
     echo "<div class='basf-spacer' style='display: block; width: 100%; height: {$spaceheight}px; background: transparent; padding: 0; margin: 0; font-size: 0; line-height: 0;'></div>"; 
    endif; 
elseif (get_row_layout() == 'terms') : 

    // Some other stuff 

endif; 

?> 

[EDIT] nach Frage bearbeiten:

Es ist nicht gut mischen mit elseif können Sie dies versuchen, die auch Schnäbel:

$terms_primcont = 1; 
$terms_seccont = 1; 
if ($terms_primcont || $terms_seccont) : 

    echo "<div class=\"terms__body-wrap\">"; 


     if ($terms_primcont) 
      echo "<div class='terms__primary'>{$terms_primcont}</div>"; 
     if ($terms_seccont) 
      echo "<div class='terms__secondary'>{$terms_seccont}</div>"; 


    echo '</div>'; 

elseif (1 === 2) 
    // never do sth. 
endif; 
+0

Ich würde gerne denken, das ist die richtige Antwort - aber es gibt einen anderen ähnlichen Code-Teil, wo ich die gleiche Mischung verwenden (siehe Frage Update), immer noch es funktioniert gut. Der einzige Unterschied ist ein öffnendes und schließendes HTML-div-Tag. –

+0

Dank @antoni - akzeptiert als die richtige Antwort. Also zusammengefasst: es ist speziell das elseif, das nicht gut mit gemischten Syntaxen spielt. Seltsames Zeug, das ist sicher !! –