2.1 案例介紹
萬年歷的實(shí)現(xiàn)。萬年歷是可以按照相應(yīng)的規(guī)則來顯示每一天的屬性醒串,為我們生活提供服務(wù)的一種工具执桌。
2.2 分析案例
通過對年月日的判斷,大量的應(yīng)用了表達(dá)式及運(yùn)算符芜赌,使用了if,switch做分支判斷仰挣。運(yùn)用循環(huán)輸出,包括了所有本章所學(xué)內(nèi)容缠沈。
2.3 核心知識
運(yùn)算符
流程控制語句
運(yùn)算符是用來對數(shù)值和變量進(jìn)行某種操作運(yùn)算的符號膘壶。一般地說,運(yùn)算符可以帶1個博烂、2個和3個運(yùn)算對象香椎。他們之間也有先后順序漱竖,具體如下:
—— 算術(shù)運(yùn)算符
—— 遞增/遞減運(yùn)算符
—— 比較運(yùn)算符
—— 邏輯運(yùn)算符
—— 位運(yùn)算符
—— 其他運(yùn)算符
1. 算術(shù)運(yùn)算符
運(yùn)算符 名稱 結(jié)果
$a + $b 加法 $a 和$b 的和
$a - $b 減法 $a 和$b 的差
$a * $b 乘法 $a 和$b 的積
$a / $b 除法 $a 除以$b 的商
$a % $b 取模 $a 除以$b 的余?
2. 遞增/遞減運(yùn)算符
運(yùn)算符 名稱 結(jié)果
++$a 前加 $a 的值加一禽篱,然后進(jìn)行操作
$a++ ? 后加 $a 的值先進(jìn)行操作,后加一
--$a 前減 $a 的值減一馍惹,然后進(jìn)行操作
$a-- ? 后減 $a 的值先進(jìn)行操作躺率,后減一
實(shí)例:
<?php
echo ?$a=5+”5th”; //輸出:10
echo ?10%3; //輸出:1
echo ?10+ $a++; //輸出:20
echo ?5- --$a; //輸出:-5
?>
3. 比較運(yùn)算符
運(yùn)算符 名稱 ??? 結(jié)果?
$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嚴(yán)格小于$b
$a > $b ????大于 ?? TRUE遇西,如果$a嚴(yán)格大于$b
$a <= $b ?? 小于等于 TRUE疟丙,如果$a 小于或等于$b
$a >= $b ?? 大于等于 TRUE赁项,如果$a 大于或等于$b
實(shí)例:
<?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. 邏輯運(yùn)算符
運(yùn)算符 名稱 結(jié)果
$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與||是同一邏輯運(yùn)算符的兩種寫法渗常。?
邏輯與和邏輯或都是短路運(yùn)算符壮不。在遇到下列邏輯表達(dá)式時,PHP解釋程序?qū)⒉粫嬎阌疫叺谋磉_(dá)式:
& ?&&
<?php
$a=10;
if(false && (++$a));
echo $a; //輸出:10
$b=10;
if(true or (++$b));
echo $b; //輸出:10
?>
5. 位運(yùn)算符
位運(yùn)算符允許對整型數(shù)中指定的位進(jìn)行置位皱碘。如果左右參數(shù)都是字符串忆畅,則位運(yùn)算符將操作字符的ASCII值。
表達(dá)式 ? 名稱 結(jié)果
$a & $b ? 按位與? 將把?$a 和?$b 中都為?1 的位設(shè)為?1尸执。
$a | $b ? 按位或 將把?$a 或者?$b 中為?1 的位設(shè)為?1家凯。
$a ^ $b ? 按位異或 將把?$a 和?$b 中不同的位設(shè)為?1。
~ $a ? 按位非 將?$a 中為?0 的位設(shè)為?1如失,反之亦然绊诲。
$a << $b ? 左移 將?$a 中的位向左移動?$b 次(每一次移動都表示“乘以?2”)。
$a >> $b ? 右移 將?$a 中的位向右移動?$b 次(每一次移動都表示“除以?2”)褪贵。
6. 其他運(yùn)算符
字符串運(yùn)算符
有兩個字符串運(yùn)算符掂之。第一個是連接運(yùn)算符(“. “ ),它返回其左右參數(shù)連接后的字符串脆丁。第二個是連接賦值運(yùn)算符(“.= “ )世舰,它將右邊參數(shù)附加到左邊的參數(shù)后。
錯誤抑制操作符
在最常見的數(shù)據(jù)庫連接與文件創(chuàng)建操作或出現(xiàn)除0等異常時槽卫,可以用@符號來抑制函數(shù)錯誤信息輸出到瀏覽器端 $a=@(5/0)
實(shí)例:
<?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
?>
順序結(jié)構(gòu)
分支結(jié)構(gòu)(選擇結(jié)構(gòu))
循環(huán)結(jié)構(gòu)
特殊流程控制語句
概述
在任何一門程序設(shè)計語言中跟压,都需要支持滿足程序結(jié)構(gòu)化所需要的三種基本結(jié)構(gòu):
—— 順序結(jié)構(gòu)
—— 分支結(jié)構(gòu)(選擇結(jié)構(gòu))
—— 循環(huán)結(jié)構(gòu)
在PHP中,為支持這三種結(jié)構(gòu)歼培,提供了實(shí)現(xiàn)這三種結(jié)構(gòu)所需的語句震蒋,下面分別進(jìn)行介紹。
順序結(jié)構(gòu):
在程序結(jié)構(gòu)中躲庄,最基本的就是順序結(jié)構(gòu)查剖。程序會按照自上而下的順序執(zhí)行。
基本形式為:
語句1噪窘;
語句2笋庄;
…
語句n;
分支結(jié)構(gòu):
1.單個if語句:
基本格式:
if(條件表達(dá)式)
{
語句組;
語句組為單條語句時可省略“{ }”倔监。
}
當(dāng)條件表達(dá)式的值為真(true)時直砂,PHP將執(zhí)行語句組,相反條件表達(dá)式的值為假(false)時丐枉,PHP將不執(zhí)行語句組哆键,忽略語句組執(zhí)行下面的語句。
if…else語句:
格式如下
if(條件表達(dá)式){
語句組1
}
else{
語句組2
???//語句組為單條語句時可省略“{ }”瘦锹。
}
if-else 條件判斷與?if 條件判斷類似籍嘹,所不同的是闪盔,if-else 語句的條件表達(dá)式值為真(true)時,會執(zhí)行?if 的本體語句(語句組1)辱士,而條件表達(dá)式值為假(false)時泪掀,則執(zhí)行?else 的本體語句(語句組2)。
3.??elseif結(jié)構(gòu):
<?php
???????$A=88;
???????echo "數(shù)學(xué)成績: ".$A."<p>";
???????if ($A>=90 && $A<=100){
??echo "不錯喔!!這次數(shù)學(xué)成績甲等!!";
???????}elseif ($A>=70 && $A<90){
?echo "還可以...這次數(shù)學(xué)成績乙等!!";
???????}elseif ($A>=60 && $A<70){
echo "勉勉強(qiáng)強(qiáng)及格邊緣...這次數(shù)學(xué)成績丙等!!";
???}else {
echo "有待下次努力...數(shù)學(xué)成績不及格!!";
???????}
?>
巢狀式if..else流程控制使用范例
<?php
$A=88;
echo "數(shù)學(xué)成績: ?$A <p>";
if ($A>=60){
if ($A>=70){
if ($A>=90){
echo "不錯喔!!這次數(shù)學(xué)成績甲等!!";
?????}else {
echo "還可以...這次數(shù)學(xué)成績乙等!!";
?????}
???}else {
echo "勉勉強(qiáng)強(qiáng)及格邊緣...這次數(shù)學(xué)成績丙等!!";
???}
}else {
echo "有待下次努力...數(shù)學(xué)成績不及格!!";
}
?>
4.?switch- case語句
switch(表達(dá)式)
{
case ??值1:
語句序列1颂碘;
break异赫;
case ??值2:
語句序列2;
break头岔;
default:
語句序列?n塔拳;
break;
}
當(dāng)程序執(zhí)行碰到switch條件判斷時峡竣,它會取出鍵值靠抑,然后與語句體中的case所列出的值逐一比較,如果數(shù)值不符合适掰,則將數(shù)值往下一個case傳遞颂碧,如果數(shù)值符合,則執(zhí)行case中的語句类浪,然后再碰到break語句即跳出switch條件判斷载城,如果所有的值比對都不符合,則會執(zhí)行default中的語句费就。
switch語句使用注意事項:
1. switch語句與if語句不同诉瓦,它僅能判斷一種關(guān)系:是否恒等。
2. switch語句中case子句的常量可以是整型常量受楼、字符型常量垦搬、表達(dá)式或變量呼寸。
在同一個switch中艳汽,case子句的常量不能相同,否則第二個值永遠(yuǎn)無法匹配到对雪。
case和 default 子句后面的語句序列允許由多個可執(zhí)行語句組成河狐,且不必用“{ }”括起來,也可以為空語句瑟捣。
switch語句中可省略break語句和default子句馋艺。但省略后會改變流程。
實(shí)例:
<?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之間";}
?>
循環(huán)結(jié)構(gòu):
1). while循環(huán)語句
基本格式:
while(表達(dá)式)
{
語句或語句序列
}
當(dāng)while循環(huán)語句中表達(dá)式(循環(huán)控制語句)的結(jié)果為真時迈套,程序?qū)⒎磸?fù)執(zhí)行同一段程序:循環(huán)體(while中的語句或語句序列)捐祠,直到滿足一定的條件(表達(dá)式的結(jié)果為假時)后才停止執(zhí)行該段程序。
實(shí)例:
<?php
//求1到100的累加桑李。
$i=1;
????$sum=0;
while($i<=100)
{
$sum+=$i;
$i++;
}
echo $sum;
?>
2).?for循環(huán)語句
基本格式:
for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{
語句或語句序列;
}
for循環(huán)語句中表達(dá)式1為循環(huán)初始條件踱蛀;表達(dá)式2為循環(huán)控制條件窿给;表達(dá)式3為控制變量遞增;語句或語句序列為循環(huán)體率拒。
<?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 條件判斷中已經(jīng)使用過?break 關(guān)鍵字崩泡,它會使得程序流程離開?switch 本體中的語句,如果?break 使用在?for猬膨、while 或?do-while 循環(huán)結(jié)構(gòu)中時角撞,將會使得程序離開該層循環(huán)。
2).?continue
continue 的作用與?break 有點(diǎn)類似勃痴,continue 若使用在?for谒所、while 或?do-while循環(huán)結(jié)構(gòu)中,當(dāng)程序執(zhí)行至?continue 時沛申,之后的語句將直接被略過百炬,而直接執(zhí)行下一次的循環(huán)動作。