一、函数参数类型
函数声明:
function sum(int $left, int $right) : string
{
return $left + $right;
};
函数调用
var_dump(sum(1, 2));
printf、sprintf、vprintf、vsprintf
// printf:返回 打印
printf('<div style="color:red">%s</div>','php中文网');
// sprintf:只返回不打印
echo sprintf('<div style="color:red">%s</div>','php中文网');
// vprintf:打印数组参数
function sum1(int $left, int $right) : string
{
return vprintf("%d + %d = %d", [$left,$right, $left + $right]);
}
sum1(2,3);
// vsprintf:只返回不打印
1.1、默认参数
if (!function_exists('sum2')) {
function sum2(int $left, int $right, int $center = 10) : int
{
return array_sum([$left, $right, $center]);
}
};
// 3.1 参数太少,使用默认参数
echo sum2(20,30) . "\n";
echo sum2(20,30,5) . "\n";
1.2、数组参数
参数过多或者不确认参数个数,在参数前面加...标识为可变参
function foo($arr, ...$arrs)
{
var_dump($arr, $arrs);
}
foo(1,2,3,4,5,6);
function boo(...$arrs)
{
var_dump(func_get_args());
}
boo(10,20,33,218,98);
1.3、命名参数,php8.0以上使用
function sum3(int $left, int $right, int $center = 10, $good = 20) : int
{
return array_sum([$left, $right, $center,$good]);
}
echo sum3( 1, 2, good:40);
1.4、引用参数
function hoo($a)
{
return $a += 10;
}
// 值传递
$a = 20;
echo hoo($a) . "<br />";
echo $a . "<br />";
// 引用传递
$c = 50;
$d = &$c;
echo $d . "<br />";
$c = 60;
echo $d . "<br />";
$d = 30;
echo $c;
1.5、返回值和返回数组
// 返回值 return:返回单一值
// 返回数组 json字符串
function fn1()
{
// return 1;
// return 1 !== 1;
return ['admin', 'admin@php.cn'];
}
// true 1 false ''
//echo fn1();
list($name, $email) = fn1();
echo $name . ' : ' . $email;
二、匿名函数、箭头函数、回调函数、递归函数
2.1、匿名函数
// 1. 匿名函数 Closure类
$b = 1;
$boo = function ($a) use ($b) {
echo $a + $b . "<br />";
};
$boo(3);
$boo(6);
2.2、箭头函数
箭头函数会自动捕获父作用域遍历进行值拷贝
$x = 1;
$fn1 = fn($a, $b) => $a + $b + $x; //省略的时return
echo $fn1(10,20);
2.3、回调函数
test.php文件
<?php
function boo(...$args) {
return array_sum($args);
}
boo(15,25,111,289,157);
demo.php文件
// 在主进程执行的过程中,突然跳转到预先设置好的函数中区执行的函数
// php单线程,同步执行,如果遇到耗时函数会发生阻塞,应该将它改为异步回调执行
require 'test.php';
// 传统调用一个命名函数
echo boo(15,25,111,289,157) . "<br />";
2.3.1、回调一个命名函数
call_user_func() call_user_func_array()
调用回调函数,并把一个数组参数作为回调函数的参数
echo call_user_func('boo',...[15,25,111,289,157]) . "<br />";
echo call_user_func_array('boo',[15,25,111,289,157]);
function insert($i){
echo "插入数据{$i}<br />";
return true;
}
$arr = range(1,10);
function action($arr, $function){
foreach ( $arr as $key => $value ) {
if($value % 2 == 0){
call_user_func($function , $value);
}
}
}
action($arr, 'insert');
2.3.2、回调匿名函数
function action2(array $arr, callable $function){
foreach ( $arr as $key => $value ) {
if ( $value % 2 == 0 ) {
call_user_func($function, $value);
}
}
}
$loo = function($i){
echo "插入数据{$i}<br />";
return true;
};
action2($arr, $loo);
2.4、递归函数的理解
function demo($a=1)
{
if($a<=5)
{
echo "第{$a}此执行的结果<br />";
$a++;
demo($a);
}
}
demo();
// 递归函数:具有递归功能的函数
// 递归函数是指直接或者间接的调用函数自身的函数