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