5. 流程控制

if

如果 ifelseif 有一個滿足條件,則不繼續(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

參考:5.1 For 循環(huán)

foreach

參考:5.2 Foreach

break

break 語句可以結(jié)束for、foreachwhile、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。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容