iT邦幫忙

2021 iThome 鐵人賽

DAY 9
0
自我挑戰組

後端新手PHP+Laravel筆記系列 第 9

[Day9]PHP判斷式02

  • 分享至 

  • xImage
  •  

PHP判斷式

break

break 結束當前 for,foreach,while,do-while 或者 switch 結構的執行。

break可以接受一個可選參數,來決定要跳出幾層迴圈。

以下為範例:

<?php
$arr = array('one', 'two', 'three', 'four', 'stop', 'five');
// 使用each() 和list() 結合用來遍歷數組
while (list (, $val) = each($arr)) {
    if ($val == 'stop') {
        break;    /* You could also write 'break 1;' here. */
    }
    echo "$val<br />\n";
}

/* 使用可選参数 */

$i = 0;
while (++$i) {
    switch ($i) {
    case 5:
        echo "At 5<br />\n";
        break 1;  /* 只退出 switch. */
    case 10:
        echo "At 10; quitting<br />\n";
        break 2;  /* 退出 switch 和 while 循环 */
    default:
        break;
    }
}
?>

continue

continue 在循環結構用用來跳過本次循環中剩餘的代碼並在條件求值為真時開始執行下一次循環。

以下為範例:

<?php
for($i=1; $i<5; $i++){
    if($i==2){
        continue;
    }
    echo "$i\n";  // outputs: 1 3 4
}
?>

switch

switch 語句類似於具有同一個表達式的一系列 if 語句。很多情況下需要把同一個變數(或表達式)與很多不同的值比較,並根據它等於哪個值來執行不同的代碼。

以下為範例,利用if/else if 和 switch實現不同方法實現相同的事:

<?php
if ($i == 0) {
    echo "i equals 0";
} elseif ($i == 1) {
    echo "i equals 1";
} elseif ($i == 2) {
    echo "i equals 2";
}

switch ($i) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
}
?>

一個 case 的特例是 default。它匹配了任何和其它 case 都不匹配的情況。例如:

<?php
switch ($i) {
    case 0:
        echo "i equals 0";
        break;
    case 1:
        echo "i equals 1";
        break;
    case 2:
        echo "i equals 2";
        break;
    default:
        echo "i is not equal to 0, 1 or 2";
}
?>

match

與switch語句類似, match表達式具有與多個備選方案進行比較的主題表達式,與switch不同,它將計算為一個很像三元表達式的值。與switch不同的是,比較的是強型別相等檢查 (===) 而不是弱型別相等檢查 (==)。匹配表達式從 PHP 8.0.0 開始可用。

範例如下:

<?php

$age = 23;

$result = match (true) {
    $age >= 65 => 'senior',
    $age >= 25 => 'adult',
    $age >= 18 => 'young adult',
    default => 'kid',
};

var_dump($result);
echo($result);
?>

// outputs:
// string(11) "young adult"
// young adult

declare

declare不是一個函數,算是一個語言結構

declare用來設定一段code的執行指令。

declare (directive)
statement

directive的部分允許設定declare代碼段的行為。

如果declare 語句後面沒有括號,則該指令適用於文件中的其餘代碼。
以下為範例:

<?php
// 兩個相等:

// 可以這樣用:
declare(ticks=1) {
    // 這裡寫腳本
}

// 也可以這樣用:
declare(ticks=1);
// 這裡寫腳本
?>

declare指令是在文件編譯時處理的,所以指令只接受字面量的值。 無法使用變量和常量。下面為範例程式碼:

<?php
// 有效程式碼:
declare(ticks=1);

// 無效,無法指定常量:
const TICK_VALUE = 1;
declare(ticks=TICK_VALUE);
?>

可以聲明三個指令:ticks,encoding和 strict_types.

ticks每次執行指定數量(N)可計時的指令時,該指令都會發送一個tick事件。可以使用register_tick_function() ,它會在每次event事件觸發時運行。

不是所有語句都可計時。通常條件表達式和參數表達式都不可計時。

以下為範例:

<?php

declare(ticks=1);

// 每次 tick 事件都會調用此函数
function tick_handler()
{
    echo "tick_handler() called\n";
}

register_tick_function('tick_handler');

$a = 1;

if ($a > 0) {
    $a += 2;
    print($a);
}

?>

該encoding指令用於指示文件使用的字符編碼。它不能用於塊,它必須應用於整個文件。

<?php
declare(encoding='ISO-8859-1');
// code here
?>

當strict_types指令設置,錯誤類型傳遞到函數參數時不會被強制轉換為正確的類型,而是拋出致命錯誤。

範例如下:

// 正常情況下
<?php
function add(int $a, int $b): int
{
    return $a + $b;
}

var_dump(add(1.0, 1.0));

// output
// int(2)

當使用strict_types後,變成強型別

<?php
declare(strict_types=1);    //加入这句

function add(int $a, int $b): int
{
    return $a + $b;
}

var_dump(add(1.0, 1.0));

// 拋出TypeError:必須為integer整數

資料來源: https://www.php.net/


上一篇
[Day8]PHP判斷式01
下一篇
[Day10]PHP判斷式03
系列文
後端新手PHP+Laravel筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言