PHP

函數function

在寫程式時,有許多時候是需要有一些重複的片段不斷執行的例子,而它不一定會在哪裡被拿來使用,而最需要的時候就要再做一次。這一類型的經常會被拿來使用的程式碼,我們會把它們集合起來給個名字,之後再視需要時「呼叫」它來執行,此種方式即為副程式,也就是函數function的機制。

簡單地說,在PHP程式中,當某一段程式碼需要經常被使用到時,就會用function定義它,定義的方式如下:

function 函數名稱(參數表列) {
  函數內要被執行的指令區塊;
  return 傳回值;
}

大部份的情況下我們會先定義函數,把所有程式中可能會用到的函數都放在程式的最前面,當需要用到時再以函數的名稱來呼叫執行即可。

請參考以下的例子:

<?php
  function show_messages() {
  	for($i=0; $i<5; $i++) echo "Hello~~<br/>\n";
  }

  show_messages();
  echo "----------<br/>\n";
  show_messages();
?>

上述程式在瀏覽器中的執行結果如下:

Hello~~
Hello~~
Hello~~
Hello~~
Hello~~
----------
Hello~~
Hello~~
Hello~~
Hello~~
Hello~~

其HTML原始碼如下所示:

Hello~~<br/>
Hello~~<br/>
Hello~~<br/>
Hello~~<br/>
Hello~~<br/>
----------<br/>
Hello~~<br/>
Hello~~<br/>
Hello~~<br/>
Hello~~<br/>
Hello~~<br/>

為了讓HTML原始碼的格式更美觀,同時也兼顧在網頁上的換列需求,在這個程式中的echo指令後面我們同時使用了<br/>和\n,這是和之前的範例程式不同之處。

要發揮函數最大的用途是參數的傳遞。上面的那個程式每次呼叫的時候都只能固定產生5個訊息,但其實產生的訊息數量應該是要能夠在呼叫的時候透過參數決定的,加上參數的函數功能之範例程式如下所示:

<?php
  function show_messages($times) {
  	for($i=0; $i<$times; $i++) echo "$i:Hello~~<br/>\n";
  }

  show_messages(3);
  echo "----------<br/>\n";
  show_messages(5);
?>

程式中我們先以3作為參數呼叫,之後再以5作為參數呼叫,同時為了要辨別輸出的個數,在輸出時也一併把$i的內容顯示出來。上面這個程式的輸出結果就會變成如下所示的樣子:

0:Hello~~
1:Hello~~
2:Hello~~
----------
0:Hello~~
1:Hello~~
2:Hello~~
3:Hello~~
4:Hello~~

加權成績計算函數

有了自訂函數的能力,就可以把一些常見的算式變成函數,再以加上參數呼叫的方式來簡化程式的內容,請看以下這個加權成績計算的例子:

<?php
  function compute_weighted($chi, $eng, $math) {
  	$score = $chi * 6 + $eng * 4 + $math * 4;
  	$average = $score / 14;
  	echo "Score:$score, weighted average:$average<br/>\n";
  }

  function compute($chi, $eng, $math) {
  	$score = $chi + $eng + $math;
  	$average = $score / 3;
  	echo "Score:$score, unweighted average:$average<br/>\n";
  }

  compute(50, 90, 82);
  compute_weighted(50, 90, 82);
  echo "-----------------<br/>\n";
  compute(60, 85, 90);
  compute_weighted(60, 85, 90);
?>

此程式在瀏覽器中執行的結果如下:

Score:222, unweighted average:74
Score:988, weighted average:70.571428571429
-----------------
Score:235, unweighted average:78.333333333333
Score:1060, weighted average:75.714285714286

從輸出的結果可以看出有無加權對於平均分數的影響。

階乘函數的應用

前面的文章中我們曾經示範過階乘函數的計算,那時我們把計算的邏輯放在主程式的迴圈中,現在學會了自訂函數的應用之後,把這些計算式拿出來作為函數會讓主程式變得更容易地理解,以下即為自訂階乘函數的應用範例:

<?php
  function factorial($number) {
  	$res = 1;
  	for($i=1; $i<=$number; $i++) {
  		$res *= $i;
  	}
  	return $res;
  }

  for ($i=1; $i<=20; $i++) {
  	echo "$i!=".number_format(factorial($i))."<br/>\n";
  }
?>

關於內建函數

許多的功能其實都有現成的函數可以拿來使用,在這裡我們只是示範如何自訂函數,事實上階乘函數也有內建函數可以使用。

number_format函數

此函數可以把數值進行自訂格式化的輸出,直接把數值傳遞進去,它可以幫我們把數值自動加上千分位記號。

在程式中我們定義了factorial這個函數,只要傳遞一個參數給它之後,它就會傳回該數的階乘值。定義了這個函數之後,即可在主程式中不斷地呼叫它,就可以利用此函數計算出大量的階乘函數數值。執行結果如下所示:

1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
7!=5,040
8!=40,320
9!=362,880
10!=3,628,800
11!=39,916,800
12!=479,001,600
13!=6,227,020,800
14!=87,178,291,200
15!=1,307,674,368,000
16!=20,922,789,888,000
17!=355,687,428,096,000
18!=6,402,373,705,728,000
19!=121,645,100,408,832,000
20!=2,432,902,008,176,640,000

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s