PHP 函式

寫程式不免會有一些特定的內容會需要重複撰寫,如果每次重複的東西都一直複製貼上之前寫的這樣程式會變成非常的長跟難看,而且如果要修改一個地方每個地方都要改。為了讓程式好看及方便修改通常會使用 function (函式) 把要重複執行的地方包起來,要使用時再做引用。
我們拿計算BMI為例,如果要一次算五個人的BMI沒有用函式的寫法是

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$w1 = 60;
$h1 = 1.6;
$bmi1 = $w1 / ($h1**2);
echo "第一個人BMI為 $bmi1";
$w2 = 65;
$h2 = 1.58;
$bmi2 = $w2 / ($h2**2);
echo "第二個人BMI為 $bmi2";
$w3 = 70;
$h3 = 1.8;
$bmi3 = $w3 / ($h3**2);
echo "第三個人BMI為 $bmi3";
$w4 = 63;
$h4 = 1.64;
$bmi4 = $w4/ ($h4**2);
echo "第四個人BMI為 $bmi4";
$w5 = 56;
$h5 = 1.5;
$bmi5 = $w5 / ($h5**2);
echo "第五個人BMI為 $bmi5";
?>

這樣重複的東西很多而且佔了很大的版面,以下是用函式的方法改寫的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
//先定義函式
function BMI($w,$h){
$bmi = $w / ($h**2); //計算BMI的公式
return $bmi; //將變數 $bmi 值回傳
}
$w1 = 60;
$h1 = 1.6;
$bmi1 = BMI($w1,$h1);
echo "第一個人BMI為 $bmi1";
$w2 = 65;
$h2 = 1.58;
$bmi2 = BMI($w2,$h2);
echo "第二個人BMI為 $bmi2";
$w3 = 70;
$h3 = 1.8;
$bmi3 = BMI($w3,$h3);
echo "第三個人BMI為 $bmi3";
$w4 = 63;
$h4 = 1.64;
$bmi4 = BMI($w4,$h4);
echo "第四個人BMI為 $bmi4";
$w5 = 56;
$h5 = 1.5;
$bmi5 = BMI($w5,$h5);
echo "第五個人BMI為 $bmi5";
?>

透過函式的方法讓重複的內容只要寫一次,這樣不僅可以增加程式的可讀性也可以減少後續修改的難易度

函式的結構

1
2
3
4
5
6
7
8
9
<?php
function 函數名稱(型別1 參數1 = 預設值1,型別2 參數2 = 預設值2,....){
函數內容;
//函數不一定要有回傳值,如果沒有回傳值 return 這行就可以省略
return 回傳值;
}

函數名稱(參數A,參數B,參數C);
?>

函式的參數

固定長度參數

上述的 BMI 函式中 有帶入兩個參數分別為體重跟身高,參數目前只有2個,實際參數的數量可以依照所需不同的功能做調整

1
2
3
4
5
<?php
function BMI(參數1,參數2,參數3.....,參數n){
函數內容;
}
?>

參數預設值

以上面BMI的範例來說明,如果使用者沒有輸入身高跟體重我們可以先給它一個預設的值,以免程式因為沒輸入而產生錯誤

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
//將參數設定為 體重60、身高1.6
function BMI($w=60,$h=1.6){
$bmi = $w / ($h**2);
return $bmi;
}

//沒有輸入參數時會以預設的 體重60、身高1.6 去做計算
$bmi1 = BMI();
echo "第一個人BMI為 $bmi1";

//有輸入參數時會以輸入的參數 體重63、身高1.64 去做計算
$w2 = 63;
$h2 = 1.64;
$bmi2 = BMI($w2,$h2);
echo "第二個人BMI為 $bmi2";
?>

不固定長度參數

如果函式輸入參數數量是不固定的,可以使用 php 內建的函式去抓取輸入多少參數及每個參數的值是多少

函數 說明
func_num_args() 取得傳入參數的個數
func_get_args() 取得傳入參數的陣列
func_get_args($i) 取得參數陣列中第 $i 個元素儲存的值(陣列索引從 0 開始)
1
2
3
4
5
6
7
8
9
10
<?php
function 函數名稱(){//()內留空就好了
$argList = func_get_args(); //取得傳入參數的陣列
$loop = 0;
foreach ($argList as $value) {
echo "第 $loop 參數的值是=$value";
}
echo '一共有'.func_num_args().'個參數';
}
?>

以上就是今天的 PHP 函式 教學拉~下篇見