一、函数的定义
<?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>';
?>