PHP 中函數的定義
* 通過在函數定義時的聲明,函數可以由任意數目的參數。
* 傳遞參數給函數的方式有兩種: 按值傳遞 和 按 引用傳遞。
<?php/** * PHP 中函數的定義 * 通過在函數定義時的聲明,函數可以由任意數目的參數。 * 傳遞參數給函數的方式有兩種: 按值傳遞 和 按 引用傳遞。 *///按值傳遞/** * @param integer $a 按值傳遞 * @param integer $b 按引用傳遞 * @param integer $c = 3 預設參數 */function A($a, & $b, $c = 3) { echo $a."\n"; echo $b."\n"; $b <<= 1; echo $c."\n";}$a = 1;$b = 1;a($a,$b); //函數名不區分大小寫echo $b."\n";/* * 可變參數: * 一個函數可能需要一個可變數目的參數。 * 為了什麼這樣的具有可變參數的函數,需要完全省略參數區塊 * PHP中提供了3個函數用於減速在函數中所傳遞的參數: * $array = func_get_args() //返回一個提供給函數的所有參數的數組 * $count = func_num_args() //返回提供給函數的參數數目 * $value = func_get_arg() //返回一個來自參數的特定參數 */function countList() { if (func_num_args() == 0 ) { return false; }else { $count = 0; for ($i = 0; $i < func_num_args(); $i++) { $count +=func_get_arg($i); } return $count; }}echo countList(1,5,9)."\n"; //輸出15/* * 遺漏參數 * 當調用函數時,可以傳遞任意個參數給函數。 * 當函數必要的參數滅有被傳遞是,此參數值為NULL,並且PHP會為每個一口的參數發出警告: */function takesTwo($a, $b) { if (isset($a)) { echo "a is set \n"; } if (isset($b)) { echo "b is set \n"; }}takesTwo(1,2);//takesTwo(1); //會出現一個warning/* * 參數的類型提示 * 當定義一個函數時,你可以要求一個參數是一個特定的類(包括類的繼承或類的介面的執行個體), * 或是繼承自一個特定的介面執行個體,一個數組或一個回調。 * * 可以再函數參數列表的變數名添加 類名、array 或是callable來實現函數提示 */class Entertainment {}class Clown extends Entertainment {}class job{}function handleEntertainment (Entertainment $e, callable $callback = null) { echo "Handling " . get_class($e). " fun\n"; if ($callback !== null) { $callback(); }}$callback = function () { echo "callback \n"; };handleEntertainment(new Clown, $callback);//handleEntertainment(new job, $callback); //執行階段錯誤/* * PHP函數可以使用return 關鍵字返回一個單值 * (如果想返回多個值可以返回一個數組) * 如果函數沒有通過return 傳回值,則傳回值預設為NULL * * 預設情況下,是從函數中複製出值。 * 要傳回值的引用,需要在聲明函數時在其前面 加 “&” 並把函數的傳回值返回給一個變數 */$names = array("LA","LB","LC","LD");function &findOne($n) { global $names; return $names[$n];}$person = &findOne(1);$person = "RB";echo $names[1]."\n";