2.1 案例介绍
万年历的实现。万年历是可以按照相应的规则来显示每一天的属性,为我们生活提供服务的一种工具。
2.2 分析案例
通过对年月日的判断,大量的应用了表达式及运算符,使用了if,switch做分支判断。运用循环输出,包括了所有本章所学内容。
2.3 核心知识
运算符
流程控制语句
运算符是用来对数值和变量进行某种操作运算的符号。一般地说,运算符可以带1个、2个和3个运算对象。他们之间也有先后顺序,具体如下:
—— 算术运算符
—— 递增/递减运算符
—— 比较运算符
—— 逻辑运算符
—— 位运算符
—— 其他运算符
1. 算术运算符
运算符 名称 结果
$a + $b 加法 $a 和$b 的和
$a - $b 减法 $a 和$b 的差
$a * $b 乘法 $a 和$b 的积
$a / $b 除法 $a 除以$b 的商
$a % $b 取模 $a 除以$b 的余
2. 递增/递减运算符
运算符 名称 结果
++$a 前加 $a 的值加一,然后进行操作
$a++ 后加 $a 的值先进行操作,后加一
--$a 前减 $a 的值减一,然后进行操作
$a-- 后减 $a 的值先进行操作,后减一
实例:
<?php
echo $a=5+”5th”; //输出:10
echo 10%3; //输出:1
echo 10+ $a++; //输出:20
echo 5- --$a; //输出:-5
?>
3. 比较运算符
运算符 名称 结果
$a == $b 等于 TRUE,如果$a等于$b
$a === $b 全等 TRUE,如果$a等于$b,并且它们的类型也相同
$a != $b 不等 TRUE,如果$a不等于$b
$a <> $b 不等 TRUE,如果$a不等于$b
$a !== $b 非全等 TRUE,如果$a不等于$b,或者它们的类型不同
$a < $b 小于 TRUE,如果$a严格小于$b
$a > $b 大于 TRUE,如果$a严格大于$b
$a <= $b 小于等于 TRUE,如果$a 小于或等于$b
$a >= $b 大于等于 TRUE,如果$a 大于或等于$b
实例:
<?php
var_dump(0=="a"); //输出:bool(true)
var_dump(0=="00"); //输出:bool(true)
var_dump(0==="00"); //输出:bool(false)
var_dump(0<>"abc"); //输出:bool(false)
var_dump(0!=="01"); //输出:bool(true)
$a=10;
$b=20;
$str=$a>$b? "true":"false";
echo $str; //输出:false
$username=isset($_GET[“username"])?$_GET[“username"]:"";
?>
4. 逻辑运算符
运算符 名称 结果
$a and $b 逻辑与 TRUE,如果 $a 与 $b 都为 TRUE
$a or $b 逻辑或 TRUE,如果 $a 或 $b 任一为TRUE
$a xor $b 异或 TRUE,如果 $a 和 $b 不同时为 TRUE
! $a 逻辑非 TRUE,如果 $a 不为 TRUE
$a && $b 逻辑与 TRUE,如果 $a 与 $b 都为TRUE
$a || $b 逻辑或 TRUE,如果 $a 或 $b 任一为TRUE
其中and与&& 、or与||是同一逻辑运算符的两种写法。
逻辑与和逻辑或都是短路运算符。在遇到下列逻辑表达式时,PHP解释程序将不会计算右边的表达式:
& &&
<?php
$a=10;
if(false && (++$a));
echo $a; //输出:10
$b=10;
if(true or (++$b));
echo $b; //输出:10
?>
5. 位运算符
位运算符允许对整型数中指定的位进行置位。如果左右参数都是字符串,则位运算符将操作字符的ASCII值。
表达式 名称 结果
$a & $b 按位与 将把 $a 和 $b 中都为 1 的位设为 1。
$a | $b 按位或 将把 $a 或者 $b 中为 1 的位设为 1。
$a ^ $b 按位异或 将把 $a 和 $b 中不同的位设为 1。
~ $a 按位非 将 $a 中为 0 的位设为 1,反之亦然。
$a << $b 左移 将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)。
$a >> $b 右移 将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)。
6. 其他运算符
字符串运算符
有两个字符串运算符。第一个是连接运算符(“. “ ),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(“.= “ ),它将右边参数附加到左边的参数后。
错误抑制操作符
在最常见的数据库连接与文件创建操作或出现除0等异常时,可以用@符号来抑制函数错误信息输出到浏览器端 $a=@(5/0)
实例:
<?php
$a="hello";
$a.=" world! "; //等同于:$a=$a." world!";
echo $a; //输出:hello world!
$m = 3;$m += 5; //等同于:$m=$m+5;
echo $m; //输出:8
$c = ($b = 4) + 5;
echo $c; //输出:9
?>
顺序结构
分支结构(选择结构)
循环结构
特殊流程控制语句
概述
在任何一门程序设计语言中,都需要支持满足程序结构化所需要的三种基本结构:
—— 顺序结构
—— 分支结构(选择结构)
—— 循环结构
在PHP中,为支持这三种结构,提供了实现这三种结构所需的语句,下面分别进行介绍。
顺序结构:
在程序结构中,最基本的就是顺序结构。程序会按照自上而下的顺序执行。
基本形式为:
语句1;
语句2;
…
语句n;
分支结构:
1.单个if语句:
基本格式:
if(条件表达式)
{
语句组;
语句组为单条语句时可省略“{ }”。
}
当条件表达式的值为真(true)时,PHP将执行语句组,相反条件表达式的值为假(false)时,PHP将不执行语句组,忽略语句组执行下面的语句。
if…else语句:
格式如下
if(条件表达式){
语句组1
}
else{
语句组2
//语句组为单条语句时可省略“{ }”。
}
if-else 条件判断与 if 条件判断类似,所不同的是,if-else 语句的条件表达式值为真(true)时,会执行 if 的本体语句(语句组1),而条件表达式值为假(false)时,则执行 else 的本体语句(语句组2)。
3. elseif结构:
<?php
$A=88;
echo "数学成绩: ".$A."<p>";
if ($A>=90 && $A<=100){
echo "不错喔!!这次数学成绩甲等!!";
}elseif ($A>=70 && $A<90){
echo "还可以...这次数学成绩乙等!!";
}elseif ($A>=60 && $A<70){
echo "勉勉强强及格边缘...这次数学成绩丙等!!";
}else {
echo "有待下次努力...数学成绩不及格!!";
}
?>
巢状式if..else流程控制使用范例
<?php
$A=88;
echo "数学成绩: $A <p>";
if ($A>=60){
if ($A>=70){
if ($A>=90){
echo "不错喔!!这次数学成绩甲等!!";
}else {
echo "还可以...这次数学成绩乙等!!";
}
}else {
echo "勉勉强强及格边缘...这次数学成绩丙等!!";
}
}else {
echo "有待下次努力...数学成绩不及格!!";
}
?>
4. switch- case语句
switch(表达式)
{
case 值1:
语句序列1;
break;
case 值2:
语句序列2;
break;
default:
语句序列 n;
break;
}
当程序执行碰到switch条件判断时,它会取出键值,然后与语句体中的case所列出的值逐一比较,如果数值不符合,则将数值往下一个case传递,如果数值符合,则执行case中的语句,然后再碰到break语句即跳出switch条件判断,如果所有的值比对都不符合,则会执行default中的语句。
switch语句使用注意事项:
1. switch语句与if语句不同,它仅能判断一种关系:是否恒等。
2. switch语句中case子句的常量可以是整型常量、字符型常量、表达式或变量。
在同一个switch中,case子句的常量不能相同,否则第二个值永远无法匹配到。
case和 default 子句后面的语句序列允许由多个可执行语句组成,且不必用“{ }”括起来,也可以为空语句。
switch语句中可省略break语句和default子句。但省略后会改变流程。
实例:
<?php
$i=2;switch ($i)
{ case 0: echo “i的值为:0”; break; case 1: echo “i的值为:1”; break; case 2: echo “i的值为:2”; break; default: echo “错误:i的值不在0-3之间";}
?>
循环结构:
1). while循环语句
基本格式:
while(表达式)
{
语句或语句序列
}
当while循环语句中表达式(循环控制语句)的结果为真时,程序将反复执行同一段程序:循环体(while中的语句或语句序列),直到满足一定的条件(表达式的结果为假时)后才停止执行该段程序。
实例:
<?php
//求1到100的累加。
$i=1;
$sum=0;
while($i<=100)
{
$sum+=$i;
$i++;
}
echo $sum;
?>
2). for循环语句
基本格式:
for(表达式1;表达式2;表达式3)
{
语句或语句序列;
}
for循环语句中表达式1为循环初始条件;表达式2为循环控制条件;表达式3为控制变量递增;语句或语句序列为循环体。
<?php for ($i = 1; $i <= 10; $i++) { echo $i; } for ($i = 1; ; $i++) { if ($i > 10) { break; } echo $i; } $i = 1; for (;;) { if ($i > 10) { break; } echo $i; $i++; } for ($i = 1; $i <= 10; echo $i, $i++);
?>
特殊流程控制语句
1). break
我们之前在 switch 条件判断中已经使用过 break 关键字,它会使得程序流程离开 switch 本体中的语句,如果 break 使用在 for、while 或 do-while 循环结构中时,将会使得程序离开该层循环。
2). continue
continue 的作用与 break 有点类似,continue 若使用在 for、while 或 do-while循环结构中,当程序执行至 continue 时,之后的语句将直接被略过,而直接执行下一次的循环动作。