PHP學習——14 PHP函數(函數的定義、函數的參數、可變函數與回調實現)

一、函數的定義

<?php
// 函數的創建包含4個部分:
// 1.關鍵字function;
// 2.符合標識符規則的函數名;
// 3.符合變量定義規則的形式參數;
// 4.一對花括號包裹的函數體
function 函數名($arg_1, $arg_2, /* ..., */ $arg_n){
  // 函數體
}
// 函數必須調用才能看到函數的執行效果,按函數名調用參數
 ?>

二、函數的參數

函數的參數:值參數,引用參數,默認參數,可變參數

<?php 
$num = 20;  // 全局變量
// 1.值參數
function add1($num){ // 值參數相當於將全局變量的值複製給函數的形參,全局變量不會被add1改變
	return $num += 1;
}
echo '全局變量$num:'.$num.'<br>';
echo 'add1的值:'.add1($num).'<br>';
echo '全局變量$num:'.$num.'<br>';
echo '<hr>';
// 2.引用參數
function add2(&$num){ // 引用參數相當於將全局變量的引用地址複製給函數的形參,全局變量會被add2改變
	echo '<hr>'.$num.'<hr>'; // 20
	return $num += 2;
}
echo '全局變量$num:'.$num.'<br>';
echo 'add2的值:'.add2($num).'<br>';
echo '全局變量$num:'.$num.'<br>';
// 3.默認參數:適用於實參數量小於形參,多出來的形參必須設置默認值,默認值的設置使用:形參=默認值,...,形參=默認值
function demo($n=1,$m=2,$k=3){
	return $n+$m+$k;
}
echo '<hr>';
echo demo().'<br>'; // 6
echo demo(2,3).'<br>'; // 8
echo demo(20,30).'<br>'; // 53
// 4.可變參數:函數可以接受任意數量的參數,適合於實際參數大於形式參數
//   func_get_args():用在函數體內,將函數當前的參數打包到一個數組內返回
function demo2(){
	echo '<pre>';
	print_r(func_get_args()); // 獲取參數列表轉爲數組返回
	echo '</pre>';
	echo func_get_arg(2);
}
demo2('html','css','javascript','php');
// 在php中還有很多可變參數的函數:array()
echo '<pre>';
print_r(array(1,2,3,4,5));
echo '</pre>';
 ?>

三、可變函數與回調實現

mixed call_user_func_array ( callable $callback , array $param_arr )
把第一個參數作爲回調函數(callback)調用,把參數數組作(param_arr)爲回調函數的的參數傳入。

<?php 
// 1.可變函數(變量函數):函數名稱來自另一個變量
function add($n,$m){
	return '$n+$m= '.($n+$m);
}
function sub($n,$m){
	return '$n-$m= '.($n-$m);
}
function mult($n,$m){
	return '$n*$m= '.($n*$m);
}
function div($n,$m){
	return '$n/$m= '.($n/$m);
}
echo '可變函數的用法:<br>';
$funcName = 'add';
echo $funcName(10,5); // add(10,5)
echo '<hr>';
$funcName = 'sub';
echo $funcName(10,5); // sub(10,5)
echo '<hr>';
$funcName = 'mult';
echo $funcName(10,5); // mult(10,5)
echo '<hr>';
$funcName = 'div';
echo $funcName(10,5); // div(10,5)
echo '<hr>';
// 用 call_user_func_array(被調用的回調函數, 參數列表數組)來調用可變函數
echo call_user_func_array($funcName,[15,3]);
echo '<hr>';
// 2.回調函數
function arithmetic($callback,$a,$b){
	return call_user_func_array($callback,[$a,$b]);
}
echo arithmetic('add',10,5); // $n+$m= 15
echo '<hr>';
echo arithmetic('sub',10,5); // $n-$m= 5
echo '<hr>';
echo arithmetic('mult',10,5); // $n*$m= 50
echo '<hr>';
echo arithmetic('div',10,5); // $n/$m= 2
echo '<hr>';
?>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章