Blogger Information
Blog 77
fans 0
comment 0
visits 55234
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
函数参数类型,匿名函数、箭头函数、回调函数、递归函数的理解
Jet的博客
Original
531 people have browsed it

一、函数参数类型

函数声明:

  1. function sum(int $left, int $right) : string
  2. {
  3. return $left + $right;
  4. };

函数调用

  1. var_dump(sum(1, 2));

printf、sprintf、vprintf、vsprintf

  1. // printf:返回 打印
  2. printf('<div style="color:red">%s</div>','php中文网');
  3. // sprintf:只返回不打印
  4. echo sprintf('<div style="color:red">%s</div>','php中文网');
  5. // vprintf:打印数组参数
  6. function sum1(int $left, int $right) : string
  7. {
  8. return vprintf("%d + %d = %d", [$left,$right, $left + $right]);
  9. }
  10. sum1(2,3);
  11. // vsprintf:只返回不打印

1.1、默认参数

  1. if (!function_exists('sum2')) {
  2. function sum2(int $left, int $right, int $center = 10) : int
  3. {
  4. return array_sum([$left, $right, $center]);
  5. }
  6. };
  7. // 3.1 参数太少,使用默认参数
  8. echo sum2(20,30) . "\n";
  9. echo sum2(20,30,5) . "\n";

1.2、数组参数

参数过多或者不确认参数个数,在参数前面加...标识为可变参

  1. function foo($arr, ...$arrs)
  2. {
  3. var_dump($arr, $arrs);
  4. }
  5. foo(1,2,3,4,5,6);
  6. function boo(...$arrs)
  7. {
  8. var_dump(func_get_args());
  9. }
  10. boo(10,20,33,218,98);

1.3、命名参数,php8.0以上使用

  1. function sum3(int $left, int $right, int $center = 10, $good = 20) : int
  2. {
  3. return array_sum([$left, $right, $center,$good]);
  4. }
  5. echo sum3( 1, 2, good:40);


1.4、引用参数

  1. function hoo($a)
  2. {
  3. return $a += 10;
  4. }
  5. // 值传递
  6. $a = 20;
  7. echo hoo($a) . "<br />";
  8. echo $a . "<br />";
  9. // 引用传递
  10. $c = 50;
  11. $d = &$c;
  12. echo $d . "<br />";
  13. $c = 60;
  14. echo $d . "<br />";
  15. $d = 30;
  16. echo $c;


1.5、返回值和返回数组

  1. // 返回值 return:返回单一值
  2. // 返回数组 json字符串
  3. function fn1()
  4. {
  5. // return 1;
  6. // return 1 !== 1;
  7. return ['admin', 'admin@php.cn'];
  8. }
  9. // true 1 false ''
  10. //echo fn1();
  11. list($name, $email) = fn1();
  12. echo $name . ' : ' . $email;


二、匿名函数、箭头函数、回调函数、递归函数

2.1、匿名函数

  1. // 1. 匿名函数 Closure类
  2. $b = 1;
  3. $boo = function ($a) use ($b) {
  4. echo $a + $b . "<br />";
  5. };
  6. $boo(3);
  7. $boo(6);


2.2、箭头函数

箭头函数会自动捕获父作用域遍历进行值拷贝

  1. $x = 1;
  2. $fn1 = fn($a, $b) => $a + $b + $x; //省略的时return
  3. echo $fn1(10,20);


2.3、回调函数

test.php文件

  1. <?php
  2. function boo(...$args) {
  3. return array_sum($args);
  4. }
  5. boo(15,25,111,289,157);

demo.php文件

// 在主进程执行的过程中,突然跳转到预先设置好的函数中区执行的函数
// php单线程,同步执行,如果遇到耗时函数会发生阻塞,应该将它改为异步回调执行

  1. require 'test.php';
  2. // 传统调用一个命名函数
  3. echo boo(15,25,111,289,157) . "<br />";

2.3.1、回调一个命名函数

call_user_func() call_user_func_array()
调用回调函数,并把一个数组参数作为回调函数的参数

  1. echo call_user_func('boo',...[15,25,111,289,157]) . "<br />";
  2. echo call_user_func_array('boo',[15,25,111,289,157]);

  1. function insert($i){
  2. echo "插入数据{$i}<br />";
  3. return true;
  4. }
  5. $arr = range(1,10);
  6. function action($arr, $function){
  7. foreach ( $arr as $key => $value ) {
  8. if($value % 2 == 0){
  9. call_user_func($function , $value);
  10. }
  11. }
  12. }
  13. action($arr, 'insert');

2.3.2、回调匿名函数

  1. function action2(array $arr, callable $function){
  2. foreach ( $arr as $key => $value ) {
  3. if ( $value % 2 == 0 ) {
  4. call_user_func($function, $value);
  5. }
  6. }
  7. }
  8. $loo = function($i){
  9. echo "插入数据{$i}<br />";
  10. return true;
  11. };
  12. action2($arr, $loo);


2.4、递归函数的理解

  1. function demo($a=1)
  2. {
  3. if($a<=5)
  4. {
  5. echo "第{$a}此执行的结果<br />";
  6. $a++;
  7. demo($a);
  8. }
  9. }
  10. demo();
  1. // 递归函数:具有递归功能的函数
  2. // 递归函数是指直接或者间接的调用函数自身的函数

Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post