1. 程式人生 > >PHP函式引數

PHP函式引數

1. 可變引數列表

 // 實現方式1:
    // func_num_args()
    // func_get_arg()
    // func_get_args()
 #例如
 function sum1(){
    $sum = 0;
    $nums = func_num_args();
    if($nums == 0){
        return $sum;
    }else{
        for($i=0;$i<$nums;$i++){
            $sum += func_get_arg($i);
        }   
    }
    echo
$sum; } echo '<br>'; echo sum1(1,2,3,4,5);
// 實現方式2:
//  function sum(...$nums){
//      ...
//      return $result
//  }
//  echo sum(1,2,3,4)
#例如
function sum2(...$nums){
    $sum = 0;
    foreach($nums as $num){
        $sum += $num; 
    }
    echo $sum;
}

2. 值傳遞和引用傳遞

#值傳遞 是一種單向傳遞,只能由實參傳遞給形參,不能由形參傳遞給實參;在記憶體中,形參單元與實參單元是不同的單元,在呼叫函式時,會給形參分配一個儲存空間,並將實參對應的值傳遞給形參,函式呼叫結束後,形參單元會被釋放,實參單元仍然保持並且維持原來的值。因此呼叫函式時,形參的值如果發生改變,並不會改變呼叫函式時傳遞進來的實參的值。
function foo($num){ $result = 1; for($i=1;$i<=$num;$i++){ $result *= $i; } $num = 5; #給形參重新賦值,然後列印檢視實參的值任然是3. return $result; } $num = 3; echo foo($num); #6 echo '$num:',$num; #3 #引用傳遞 function swap(&$a,&$b){ $tmp = $a; $a = $b; $b = $tmp; } $a1
= 5; $b1 = 3; echo swap($a1,$b1); echo '$a1:',$a1; #3 echo '$b1:',$b1; #5 echo '<br>';

3. 遞迴函式舉例

#遞迴函式
function recursive($i){
    $num = 1;  #定義一個變數接收結果
    if(1 == $i){
        return 1;
    }else{
        $num = $i * recursive($i-1); 
    }
    return $num;
}
echo recursive(5);
echo "</br>";

4. 閉包和匿名函式

function test_closure($name,closure $clo){
    echo 'Hello,{$name}\n';
    echo "</br>";
    $clo();
}

test_closure("Lily",function(){
    echo "Redirect to VIP welcome page.";
});