Alternative Syntax für Kontrollstrukturen

(PHP 4, PHP 5, PHP 7, PHP 8)

PHP bietet eine alternative Syntax für einige seiner Kontrollstrukturen an, namentlich für if, while, for, foreach und switch. In jedem Fall ist die Grundform der alternativen Syntax ein Wechsel der öffnenden Klammer gegen einen Doppelpunkt (:) und der schließenden Klammer in endif;, endwhile, endfor;, endforeach; respektive endswitch.

<?php if ($a == 5): ?>
A ist gleich 5
<?php endif; ?>

Im obigen Beispiel ist der HTML-Block "A ist gleich 5" in ein if-Statement verschachtelt, das in alternativer Syntax notiert ist. Der HTML-Block würde nur angezeigt werden, wenn $a gleich 5 ist.

Die alternative Syntax lässt sich ebenfalls auf else und elseif anwenden. Im Folgenden wird eine if-Struktur mit elseif- und else-Teilen im alternativen Format gezeigt:

<?php
if ($a == 5):
    echo 
"a gleich 5";
    echo 
"...";
elseif (
$a == 6):
    echo 
"a gleich 6";
    echo 
"!!!";
else:
    echo 
"a ist weder 5 noch 6";
endif;
?>

Hinweis:

Das Vermischen unterschiedlicher Schreibweisen im selben Kontrollblock ist nicht unterstützt.

Warnung

Jegliche Ausgabe (einschließlich Whitespace) zwischen einer switch Anweisung und dem ersten case ist ein Syntax Fehler. Zum Beispiel ist folgendes ungültig:

<?php switch ($foo): ?>
    <?php case 1?>
    ...
<?php endswitch ?>

Hingegen ist das folgende gültig, da das abschließende Zeilenende nach der switch Anweisung als Teil des schließenden ?> angesehen wird, und daher zwischen switch und case nichts ausgegeben wird:

<?php switch ($foo): ?>
<?php 
case 1?>
    ...
<?php endswitch ?>

Siehe auch while, for und if für weitere Beispiele.

add a note add a note

User Contributed Notes 2 notes

up
0
toxyy
1 month ago
I feel compelled to give a more elegant way using heredoc than the other comment:

<ul>
<?php foreach($list as $item): echo
<<<ITEM
    <li id="itm-$item[number]">Item $item[name]</li>
ITEM;
endforeach;
?>
</ul>

Which works better with multi line blocks, as you only need one overall php tag.

(please don't omit the closing </li> tag despite it being legal, personal preference)
up
-18
johannes dot kingma at gmail dot com
6 months ago
The alternative control syntax can be combined elegantly with the short php notation <?- => for output where both blend in into the html code

    <ul>
    <?php for($counter=0; $counter<10; $counter++) :?>
        <li id="itm-<?=$counter?>">Item <?=$counter?>
    <?php endfor;?>
    </ul>

(Btw. ommiting the </li> is perfectly legal)
To Top