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

User Contributed Notes 2 notes

up
10
toxyy
2 years 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
-1
albaash247 at gmail dot com
8 months ago
i was wondering which solution is better (using heredoc or Alternative syntax). Anyway, you can use heredoc to populate data like this:

<?php
function printUsers()
{
require_once
'../API/get-users.php';

foreach (
getResponse() as $user) {
$template = <<<HTML
<tr id="userRowTemplate">
<th id="txtUserId" scope="row" >
$user[id]</th>
<td id="txtUserFullName">
$user[full_name]</td>
<td id="txtUserEmail">
$user[email]</td>
<td id="action">
<button id="btnEnable">Enable</button>
<button id="btnDisable">Disable</button>
</td>
</tr>
HTML;

echo
$template;
}
}

?>
To Top