函数的嵌套调用指的是在调用一个函数的过程中,调用另外一个函数,这种在函数内调用其他函数的方式称为嵌套调用。
function example($price,$tax){
function examples($yuan,$taxs=7.5){
return $yuan*$taxs;
}
$total=$price+($price*$tax);
echo "价格是:$total 美元
";
echo "价格是:".examples($total)."元
";
}
example(15.00,0.75);
?>
(运行结果:价格是:26.25 美元,价格是:196.875元)
举例:班主任老师要计算每个学生语文和数学平均分,其实现思路是首先编写一个函数用于计算学生的语文和数学的总分,然后再编写一个函数用于实现学生的平均分。
递归调用是函数嵌套调用中一种特殊的调用。它指的是一个函数在其函数体内调用自身的过程,这种函数成为递归函数。
function arrContentReplact($array)
{
if(is_array($array))
{
foreach($array as $k => $v)
{
$array[$k] = arrContentReplact($array[$k]);
}
}else
{
$array = str_replace(
array('<', '>'),
array('{', '}'),
$array
);
}
return $array;
}
$arr = array(array("< 小刚>","< 小晓>",array("<小强>",array("<浪人>"))),"< 小飞>","< 小李>","< 小红>");
$arr3 = arrContentReplact($arr);
echo "
";
print_r($arr3);
echo "
";
?>
举例:求n的阶乘,计算公式为1×2×3×…×n。如4的阶乘等于1×2×3×4=24。
//局部变量
function num()
{
$i = 1;
echo $i;
++$i;
}
//静态变量
function num()
{
static $i = 1;
echo $i;
++$i;
}
可变函数的实现是在一个变量前添加一个“$”符号,就变成了另外一个变量。同理,可变函数的实现就是在一个变量名后添加一对圆括号“()”,让其变成一个函数的形式,然后PHP就寻找与变量值同名的函数,并且尝试执行它。
function echoString($str){
echo($str);
}
$varFun="echoString";
$varFun=("Output String");//输出"Output String
回调函数(callback):指的就是具有callable类型的函数,一般用作参数的传递。如PHP内置函数call_user_func()可以接受用户自定义的回调函数作为参数。
function fnCallBack( $msg1 , $msg2 )
{
echo 'msg1:'.$msg1;
echo "
\n";
echo 'msg2:'.$msg2;
}
$fnName = "fnCallBack"; //方法名
$params = array( 'hello' , 'world' );//传给参数的值
call_user_func_array( $fnName , $params );
匿名函数:就是没有函数名称的函数,也称作闭包函数,经常用作回调函数参数的值。对于临时定义的函数,使用匿名函数无需考虑函数命名冲突的问题。
$sum = function($a, $b) { // 定义匿名函数
return $a + $b;
};
echo $sum(100, 200); // 输出结果:300
匿名函数中使用外部的变量,需要通过use关键字实现。use关键字后圆括号“()”中的内容即为要使用的外部变量列表,多个变量之间使用英文逗号“,”分隔即可。
$c = 100;
$sum = function($a, $b) use($c) {
return $a + $b + $c;
};
echo $sum(100, 200); // 输出结果:400
此之外,匿名函数还可以作为函数的参数传递,实现回调函数。
function calculate($a, $b, $func)
{
return $func($a, $b);
}
echo calculate(100, 200, function($a, $b) { // 输出结果:300
return $a + $b;
});
echo calculate(100, 200, function($a, $b) { // 输出结果:20000
return $a * $b;
});