if
如果 if
或 elseif
有一個(gè)滿足條件,則不繼續(xù)進(jìn)行判斷。
// 第一種方式
if(TRUE){
// 嵌套第二種方式
if(TRUE):
echo '1';
endif;
}else if(TRUE){
echo '2';
}elseif(TRUE){
echo '3';
}else{
echo '4';
}
// 第二種方式
if(TRUE):
// 嵌套第一種方式
if(FALSE){
echo 'a';
}else{
echo 'A';
}
elseif(TRUE):
echo 'b';
else:
echo 'c';
endif;
// 最終輸出:1A
在第一種方式中,else if
可以寫成elseif
,兩者效果一樣,但是第二種方式中只能使用elseif
。
兩種方式中,都可以將 else
省略不要。
兩種方式的區(qū)別就是使用 :
和 endif;
代替了大括號(hào) {}
,但效果是一樣的,而這種方式不僅限于 if
結(jié)構(gòu),包括while
、for
、foreach
、switch
都可以這么用。
兩種方式也不能結(jié)合在一起混合使用,如下例:
// 報(bào)錯(cuò)
if(TRUE):
echo 'aaa';
else{
echo 'bbb';
}
// 報(bào)錯(cuò)
if(true){
echo 'aaa';
}
else:
echo 'bbb';
endif;
while
while
結(jié)構(gòu)只要滿足條件便會(huì)一直執(zhí)行,如果條件不滿足,便會(huì)終止循環(huán),如果一開(kāi)始條件就不滿足,則一次都不會(huì)執(zhí)行。
可以使用 continue
直接進(jìn)入下一次循環(huán),也可以使用 break
中斷循環(huán)。
// 第一種方式
$count = 10;
while($count){
echo $count--;
}
// 第二種方式
$count = 10;
while($count):
echo $count--;
endwhile;
// 跳過(guò)某一次
$count = 10;
while($count){
// 當(dāng)計(jì)數(shù)器為5時(shí),遞減并直接進(jìn)入下一次循環(huán)
if($count == 5) {
$count--;
continue;
}
echo $count--;
}
// 中途停止
$count = 10;
while($count){
// 當(dāng)計(jì)數(shù)器為5時(shí),直接中斷循環(huán)
if($count == 5) {
break;
}
echo $count--;
}
do while
do while
只有一種寫法,和 while
不同的是,前者在循環(huán)后執(zhí)行檢查,后者是循環(huán)前執(zhí)行檢查,所以 do while
最少會(huì)執(zhí)行一次,哪怕初始條件就是 FALSE
。
$count = 10;
do{
echo $count--;
if($count == 5) break;
}while(true);
for
foreach
參考:5.2 Foreach
break
break
語(yǔ)句可以結(jié)束for
、foreach
、while
、do while
、switch
結(jié)構(gòu)的執(zhí)行,如果在多重嵌套的循環(huán)體中,可以給break
增加一個(gè)可選的數(shù)字來(lái)決定跳出幾重循環(huán),如:break 2;
,可跳出2重循環(huán),默認(rèn)不填寫是1
,如break;
。
// 輸出一次 hello world
for($i = 0;$i < 10;$i++){
for($j = 0;$j < 10;$j++){
echo 'hello world';
break 2;
}
}
continue
continue
語(yǔ)句可以終止本次循環(huán)并進(jìn)入下一次循環(huán),前提是下一次循環(huán)的條件通過(guò),使用方法如同break
,也可以設(shè)置跳過(guò)幾重循環(huán)。
switch
參考:5.3 Switch
declare
declare
是一個(gè)函數(shù),用來(lái)聲明一些腳本處理方式,例如啟用嚴(yán)格模式。
// 啟用嚴(yán)格模式
declare(strict_types = 1);
// 定義函數(shù)
function sum(int $x, int $y){
return $x + $y;
});
// 調(diào)用函數(shù)
sum(1, 2); // 返回3
sum("1", "2"); // 沒(méi)啟用嚴(yán)格模式之前,返回3,啟用后報(bào)錯(cuò),因?yàn)閰?shù)類型不相同
return
return
用來(lái)返回一個(gè)值并終止當(dāng)前作用域下的代碼執(zhí)行。
當(dāng)它用在函數(shù)里時(shí),return
后面的參數(shù)就當(dāng)做返回值,同時(shí)該函數(shù)終止繼續(xù)執(zhí)行。
當(dāng)它用在腳本里時(shí),return
后面的參數(shù)就當(dāng)做返回值,同時(shí)該腳本終止繼續(xù)執(zhí)行。
如果return
后面沒(méi)有參數(shù),則默認(rèn)返回NULL
。
// child.php
return [
'dbhost' => '127.0.0.1',
'dbname' => 'website',
'dbuser' => 'root',
'dbpass' => '123456',
];
// index.php
// 引入文件并獲取返回值
$array = include("child.php");
/*
Array
(
[dbhost] => 127.0.0.1
[dbname] => website
[dbuser] => root
[dbpass] => 123456
)
*/
print_r($array);
引入文件
參考:5.4 引入文件
goto
goto
是個(gè)有意思的東西,類似 html
中的錨點(diǎn)鏈接,需要先在某個(gè)地方定義錨點(diǎn),然后再跳過(guò)去。
// 執(zhí)行跳轉(zhuǎn)
goto token;
echo "hello";
// 定義標(biāo)記
token:
echo "world";
上例代碼運(yùn)行后只會(huì)輸出 world
。
但這個(gè)跳轉(zhuǎn)也不是無(wú)限制的,它無(wú)法跳出當(dāng)前文件或是當(dāng)前作用域。
假如當(dāng)前代碼正執(zhí)行到函數(shù)或是一個(gè)類的方法中,那么它無(wú)法跳出去,因?yàn)楹瘮?shù)或方法是一個(gè)局部的作用域,它只能在函數(shù)里跳來(lái)跳去。
它也無(wú)法從正常結(jié)構(gòu)中跳轉(zhuǎn)到循環(huán)結(jié)構(gòu)里,但是他可以從循環(huán)結(jié)構(gòu)里跳出來(lái)。
for ($i = 0; $i < 100; $i++) {
// 執(zhí)行跳轉(zhuǎn)
goto token;
echo $i;
}
echo "hello";
// 定義標(biāo)記
token:
echo "world";
上例還是輸出 world
。