PHP函式引數
阿新 • • 發佈:2019-02-05
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.";
});