![]() |
溫瑞烘老師的教學歷程檔案(Teaching ePortfolio) - 102-1--物件導向程式設計 - 第4週講義-PHP函數 |
| 第4週講義-PHP函數PHP函數 本文引自http://pydoing.blogspot.tw/2012/10/php-tutorial.html http://www.jollen.org/php/ebook/ch9.html 函數 (function) 是一種功能性的模組,可以將程式 (program) 分割成小部分,藉由呼叫函數安排執行順序。 定義函數使用關鍵字 (keyword) function ,其後空一格接函數名稱,函數名稱後緊接小括弧,小括弧中為參數列 (parameter list) ,函數可以有參數 (parameter) 也可以沒有參數,同樣可以有回傳值 (return value) 也可以沒有回傳值,端視需要而定。如何定義 function PHP 的函數定義是利用 function 關鍵字,語法: function func_name(傳入參數1, 傳入參數2, ...) { ... 程式區 ... } 函數可以讓我們的程式更具可讀性,也符合模組化程式設計的原則。底下是一個定義函數的範例: function IsAlpha($x) { // 字母回傳True否則回傳False if ($x >= 'a' && $x <= 'z') return TRUE; if ($x >= 'A' && $x <= 'Z') return TRUE; return FALSE; } 這個函數傳入一個參數,如果是26個字母之一,會傳回TRUE、否則傳回FALSE。再看下一個例子 function big($a, $b) { if ($a > $b) { return $a; } else { return $b; } } big() 函數回傳兩個參數中的較大值,參數數量則是依需求自己定義,這裡為兩個 $a 與 $b ,另外此例用了兩個 return ,有回傳值的函數至少要有一個 return , return 就是函數結束執行,將控制權交還原本呼叫函數的地方。 範例程式一 <?php echo big("John", "Mary")." is bigger! <br>";
if ($a > $b) { return $a; } else { return $b; } } ?> 第 2 行先比較 33 與 22 的大小,然後印出哪一個比較大。第 3行則是比較 "John" 與 "Mary" 的大小,字串比較是先比較第一個字元,按字母順序,順序越後面的值越大 參數傳遞與傳回值 PHP 支援 call by value 與 call by reference 兩種傳遞參數的方法,並且在函數執行結束後,可以利用 return 傳回一個值給父程式。 call by value:call by value 是父程式直接將值或變數傳給函數,因此該數值或變數被儲存於兩個不同的記憶體位置。當傳入一個變數時,在函數裡改變傳入的參數值對父程式的變數並不會造成影嚮。 範例: $x = 25; $y = 10; echo sum($x, $y); // 輸出 35; echo $x; // 輸出 25 function sum($x, $y) { $x += $y; return $x; } 因為參數的傳遞使用 call by value 的方式,因此父程式的 $x 與 sum() 函數的 $x 變數不會互相影嚮。這是因為這二個變數是分別位於兩個不同的記憶體位置的關係。 call by reference:call by reference 是一種非常好用的機制,利用 call by reference 傳入一個變數參考時,等於是將指向該變數的指標傳給函數,在函數裡改變該參考等於改變原來的變數值,因此可以達到改變原來變數值的效果。利用 call by reference 傳遞傳數時,傳入的變數與函數裡的參數變數位於相同的記憶體位置。在 PHP 程式裡如果要傳遞參考 (call by reference) 的話,有二種做法,我們可選擇適合我們使用的方法: 1. 呼叫函數時在變數前加上 &,例如: add(&$x, $y); 此時 add() 的寫法沒有什麼不同: function add($x, $y) { $x = $x + $y; } 2. 在函數的參數加上 &,例如: function add(&$x, $y) { $x = $x + $y; } 此時呼叫函數的寫法: add($x, $y); 二種寫法實際上是有所不同的。第一種寫法是呼叫函數時在變數前加上 &,這種寫法可以讓我們在呼叫函數時才決定是否要採用 call by reference 的方式傳遞參數。而第二種寫法是在函數的傳入值前加上 &,這種寫法會強迫使用 call by reference 的方式傳遞參數,而不管呼叫函數時是採取 call by value 或是 call by reference 的方式。善用二種方式間的差異可以幫助我們維護程式的品質。例如,當我們的函數必須替父程式維護傳入變數值時,這時就可以強迫函數的傳入值採取 call by reference 的方式,如此就算我們呼叫函數時手誤少打了一個 "&",也可以正確採取 call by reference 的方式。 在前面的範例中,我們直接以 return [value] 的方式將值傳回給父程式。由於一個函數只會有一個有效的 return,所以只能有一個傳回值。 如何傳回多個值:如果要傳回多個值,可以利用傳回陣列的小技巧來達成,例如: function test() { return array(10, 20, 30, 40, 50); } 因為傳回給父程式的是一個陣列,因此父程式必須利用 list() 函數才能將陣列的值分別指定給變數。範例: list($a, $b, $c, $d, $e) = test(); echo $a; // 輸出為 10 echo $b; // 輸出為 20 echo $c; // 輸出為 30 echo $d; // 輸出為 40 echo $e; // 輸出為 50
function myfunction($a,$b,$op) {
2. 假設 $a=100; $b=20; 計算下列範例的內容,以echo 輸出
3. 假設 $a=100; $b=20; 計算下列範例的內容,以echo 輸出
|
|
中華科技大學數位化學習歷程 - 意見反應 | ![]() |