©
This document uses PHP Chinese website manual Release
(PHP 4, PHP 5)
PHP 提供了一些流程控制的替代语法,包括 if,while,for,foreach 和 switch。替代语法的基本形式是把左花括号({)换成冒号(:),把右花括号(})分别换成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。
<?php if ( $a == 5 ): ?>
A is equal to 5
<?php endif; ?>
在上面的例子中,HTML 内容“A is equal to 5”用替代语法嵌套在 if 语句中。该 HTML 的内容仅在 $a 等于 5 时显示。
替代语法同样可以用在 else 和 elseif 中。下面是一个包括 elseif 和 else 的 if 结构用替代语法格式写的例子:
<?php
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:
不支持在同一个控制块内混合使用两种语法。
更多例子参见 while,for 和 if。
[#1] v14t at gmx dot com [2014-04-06 14:14:01]
isset( $value ) AND print( $value );
the reason why it doesn't work with echo, it's because echo does not return anything, while print _always_ returns 1, which is considered true in the expression
[#2] josh at qaribou dot com [2014-03-05 22:17:03]
The reason temec987's approach of using boolean operators as an alternative to control structures won't work for an 'echo' is because the result of evaluating the expression will always be a boolean.
Other languages (e.g. ruby) are much better suited to this approach, as the expression evaluated will be the resultant value, e.g.:
5 && 4
In ruby, this would be 4, but in PHP, this would be true (type-juggled equivalent is 1), which isn't useful for anything but further binary logic.
You can still use logical operators as conditionals, but only for executing logic, not for getting a value back, e.g.:
<?php
defined('USER_CAN_EXECUTE') or die('Access denied.');
?>
is a nice one to use for access control, or say you want to put in a quick check that your object has all the data loaded it needs to call a webservice (functions are just examples):
<?php
$this->readyForService() and $this->postData('http://endpoint.com');
?>
What you can't use them for is something like this:
<?php
echo (strlen($mystring) > 5) and $mystring;
?>
instead, you'd use ternaries for that:
<?php
echo (strlen($mystring) > 5) ? $mystring : null;
?>
[#3] timeroot dot alex at gmail dot com [2013-12-16 00:54:12]
The reason for the "workaround" jeremiah mentioned, in the case of the switch statement, can be understood as follows; in any place where you can have an echo statement (an if block, a switch's case, whatever), that's where you can have the raw HTML. In PHP this basically gets handled just like that -- like an echo statement.
In between a switch and a case, though, you can't echo anything. By placing the switch and the case in two separate blocks of PHP, with a raw HTML newline echo'ed in between them, PHP basically had to try to find where that statement would be. And it can't be there, hence the difficulty.
[#4] temec987 at gmail dot com [2011-10-02 19:00:40]
A simple alternative to an if statement, which is almost like a ternary operator, is the use of AND. Consider the following:
<?php
$value = 'Jesus';
// This is a simple if statement
if( isset( $value ) )
{
print $value;
}
print '<br />';
// This is an alternative
isset( $value ) AND print( $value );
?>
This does not work with echo() for some reason. I find this extremely useful!
[#5] ej at iconcept dot fo [2009-05-28 05:30:32]
if statement in 1 line
<?php
$hour = 11;
print $foo = ($hour < 12) ? "Good morning!" : "Good afternoon!";
?>
return Good morning!
[#6] flyingmana [2009-03-26 01:43:46]
It seems to me, that many people think that
<?php if ($a == 5): ?>
A ist gleich 5
<?php endif; ?>
is only with alternate syntax possible, but
<?php if ($a == 5){ ?>
A ist gleich 5
<?php }; ?>
is also possible.
alternate syntax makes the code only clearer and easyer to read
[#7] jeremia at gmx dot at [2008-01-28 06:52:21]
If you wan't to use the alternative syntax for switch statements this won't work:
<div>
<?php switch($variable): ?>
<?php case 1: ?>
<div>
Newspage
</div>
<?php break;?>
<?php case 2: ?>
</div>
Forum
<div>
<?php break;?>
<?php endswitch;?>
</div>
Instead you have to workaround like this:
<div>
<?php switch($variable):
case 1: ?>
<div>
Newspage
</div>
<?php break;?>
<?php case 2: ?>
</div>
Forum
<div>
<?php break;?>
<?php endswitch;?>
</div>
[#8] skippy at zuavra dot net [2005-06-27 04:32:10]
If it needs saying, this alternative syntax is excellent for improving legibility (for both PHP and HTML!) in situations where you have a mix of them.
Interface templates are very often in need of this, especially since the PHP code in them is usually written by one person (who is more of a programmer) and the HTML gets modified by another person (who is more of a web designer). Clear separation in such cases is extremely useful.
See the default templates that come with WordPress 1.5+ (www.wordpress.org) for practical and smart examples of this alternative syntax.