Hướng dẫn dùng alternate net trong PHP

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

PHP offers an alternative syntax for some of its control structures; namely, if, while, for, foreach, and switch. In each case, the basic form of the alternate syntax is to change the opening brace to a colon (:) and the closing brace to endif;, endwhile;, endfor;, endforeach;, or endswitch;, respectively.

if ($a == 5): ?>
A is equal to 5
endif; ?>

In the above example, the HTML block "A is equal to 5" is nested within an if statement written in the alternative syntax. The HTML block would be displayed only if $a is equal to 5.

The alternative syntax applies to else and elseif as well. The following is an if structure with elseif and else in the alternative format:

if ($a == 5):
    echo 
"a equals 5";
    echo 
"...";
elseif (
$a == 6):
    echo 
"a equals 6";
    echo 
"!!!";
else:
    echo 
"a is neither 5 nor 6";
endif;
?>

Note:

Mixing syntaxes in the same control block is not supported.

Warning

Any output (including whitespace) between a switch statement and the first case will result in a syntax error. For example, this is invalid:

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

Whereas this is valid, as the trailing newline after the switch statement is considered part of the closing ?> and hence nothing is output between the switch and case:

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

See also while, for, and if for further examples.

toxyy

4 months ago

I feel compelled to give a more elegant way using heredoc than the other comment:


    foreach($list as $item): echo
    <<
       
  • Item $item[name]

  • ITEM;
    endforeach;
    ?>

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

(please don't omit the closing tag despite it being legal, personal preference)

johannes dot kingma at gmail dot com

9 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

   


        for($counter=0; $counter<10; $counter++) :?>
           
  • Item
        endfor;?>
       

(Btw. ommiting the is perfectly legal)