在软件开发过程中,代码执行的流程控制是非常重要的一项工作,传统的流程控制语句包括条件语句、选择语句和循环语句,本节我们就先来看看PHP中的条件控制语句。
if语句
和大多数编程语言一样,在PHP中的条件控制语句同样使用if关键字,并且使用方法也是与C风格相似的,如:
if(<条件>)
{
<语句块>
}
如果<条件>成立(为true时)则执行<语句块>,如果条件不成立(为false)时,则继续执行“}”后面的语句,如下面的语句,其功能是判断一个整数是不是偶数。
$num = 8;
if($num%2==0)
{
echo "$num","是一个偶数";
}
此代码将显示“8 是一个偶数”。
如果语句块只有一条语句,就像上面的代码时,我们可以省略{和},如:
$num = 8;
if($num%2==0)
echo "$num","是一个偶数";
或者,你还可以将它们放在一行,如:
if(num%2==0) echo "num","是一个偶数";
if-else语句
前面的if语句的示例中,当条件成立时会显示一条信息,但条件不成立时呢?很多时候,我们必须对条件不成立时的情况作出相应的处理,此时,可以使用if-else语句结构,其基本使用方法如下:
if(<条件>)
{
<语句块1>
}
else
{
<语句块2>
}
当条件成立时执行<语句块1>,条件不成立时执行<语句块2>。如下面的代码。
$num = 9;
if($num%2==0)
{
echo $num,'是一个偶数';
}
else
{
echo $num,'不是一个偶数';
}
代码会显示“9 不是一个偶数”。
if-elseif语句
当我们的代码逻辑中包含两个或更多的条件时,可以使用if-elseif语句,它的基本格式如下:
if(<条件1>)
{
<语句块1>
}
elseif(<条件2>)
{
<语句块2>
}
elseif(<条件n>)
{
<语句块n>
}
如下面的代码,我们将根据分数进行评级。
$score = 88;
if($score>=90){
echo '优秀';
}elseif($score>=80 && $score<90){
echo '好';
}elseif($score>=70 && $score<80){
echo '良';
}elseif($score>=60 && $score<70){
echo '及格';
}else{
echo '不及格';
}
代码会显示“好”。请注意代码的最后,我们添加了else语句,在实际应用中,可以根据需要选择是否在if-elseif语句结构中使用else语句,但应注意,else语句只能在条件语句结构的最后,并且只能出现一次,这和if-else语句中的使用是一致的。
复杂条件与嵌套
在if-elseif的示例中,我们在条件中使用了与运算符(&&),也就是两个条件都成立时,整个条件表达式的结果才为true,在实际应用中,我们还可能需要写更复杂的判断条件,此时,应注意与运算(&&)、或运算(||)和非运算(!),以及各比较运算符的综合应用,使用()将条件进行有效的组合会让代码可读性更强,同时也会更安全,这样,你就不会因为忘了运算符优先级而导致运算顺序错误,这也是我们在本书中没有提及运算符优先级的原因。
如下面的代码,功能是判断一个年份是否为闰年。
$year = 2008;
if(($year%100!=0 && $year%4==0) ||
($year%100==0 && $year%400==0))
{
echo $year,'年是闰年';
}
else
{
echo $year,'年不是闰年';
}
代码会显示“2008 年是闰年”。条件中的执行逻辑有两种情况,如果有其中一种成立,指定的年份就是闰年,第一种情况是年份不能被100整除时,如果能被4整除,则年份是闰年;第二种情况是年份能被100整除,则必须也能被400整除才是闰年。
如果你觉得前面的条件比较复杂,我们还可以将其分解,使用嵌套条件语句来完成,如下面的代码。
$year = 2008;
$isLeapYear = false;
if($year%100!=0)
{
if($year%4==0)
{
$isLeapYear = true;
}
}else
{
if($year%400==0)
{
$isLeapYear = true;
}
}
if($isLeapYear)
{
echo $year,'年是闰年';
}
else
{
echo $year,'年不是闰年';
}
虽然代码长了很多,但可以帮助我们理解条件语句的嵌套使用。
此外,请注意$isLeapYear变量的使用,如果不使用此变量,相信代码的结构会更复杂,你可以自己动手试一试。布尔型变量的这种使用方法,在复杂的条件判断或数据检查操作中是很常见的。