博客列表 >PHP函数的声明与调用,函数的不同类型、返回值方式及参数分类

PHP函数的声明与调用,函数的不同类型、返回值方式及参数分类

emagic
emagic原创
2020年07月08日 22:24:401068浏览

一、函数的声明与调用

函数的含义:

  • 代码复用的重要手段
  • 函数名称以字母或下划线开头(不能以数字开头),标识符必须满足php标识符的基本要求,只允许字母数字或下划线且不允许数字开头

    1. function 函数名称标识符(参数){
    2. 执行语句,也可以为空
    3. return 将函数的执行结果返回到调用者
    4. }

调用:按名称调用

  1. <?php
  2. function modf (int $a,int $b){
  3. return $a % $b;
  4. }
  5. echo modf(7,3);

二、函数的类型

1.自定义函数:由用户自定义函数,用户自己取函数名

  1. <?php
  2. function show (int $d):string{
  3. if ($d >=6){
  4. return '今天休息';}
  5. else
  6. return '今天上班';
  7. }
  8. echo show(5);

2.系统函数:php内置的函数,php实现写好的了,直接使用

  1. <?php
  2. $str ="sdfEERR";
  3. //全部转为小写
  4. echo strtolower($str);
系统函数函数 功能
substr 字符串截取
mb_substr 多字节截取

3.可变函数(函数名是变量)

  1. <?php
  2. // 可变函数,把函数名变为一个变量
  3. function username(string $name)
  4. {
  5. return $name;
  6. }
  7. $var = 'username';
  8. // 普通用函数名调用函数
  9. echo username('admin'),'<hr>';
  10. // 用可变函数变量名调用,即用$var中的值代替了函数名调用函数
  11. echo $var('master'),'<hr>';

4.匿名函数/闭包

拥有名称的函数叫:命名函数/具名函数
无名的叫匿名函数
匿名函数/闭包,在php中也称为闭包,可以访问父作用域中的变量 function (参数) use ($外部变量){
}

  • 常规匿名函数
  1. <?php
  2. $tax =function(float $money ,float $t):float
  3. {
  4. return $money * $t ;
  5. };
  6. echo "个人所得税应缴:" . $tax(18000,0.05).'元';
  • 匿名函数可以访问父作用域中的变量,当父作用域是全局时,用匿名函数可以访问全局变量
  1. <?php
  2. $passlevel = 60;
  3. // 这是一个全局变量
  4. $test = function(int $level) use($passlevel):string
  5. {
  6. if ($level > $passlevel)
  7. return "恭喜通过测试";
  8. else
  9. return "要继续加油哦";
  10. };
  11. echo $test(59),'<hr>';
  12. //这里函数只需要输入一个参数就可以完成,比较的值是全局变量中设置的,如果标准改为70合格,也不用改函数的代码
  • 匿名函数可以访问父作用域中的变量,当父作用域是父函数时,用匿名函数可以访问是父函数作用域中的变量
  1. <?php
  2. $pass = function ($passlevel) {
  3. // 当父作用域是父函数时passlevel是父函数的变量
  4. $test = function(int $level) use($passlevel):string
  5. {//使用匿名函数访问父作用域中的变量时,一定要在匿名函数后面加上"use(父作用域中的变量)
  6. if ($level > $passlevel)
  7. return "恭喜通过测试";
  8. else
  9. return "要继续加油哦";
  10. };
  11. return $test;
  12. };
  13. echo $pass(60)(70),'<hr>';
  14. //这里函数只需要输入两个参数才可以完成,调用父函数名就行,第一个参数是父函数的参数,设置及格线,第二个括号中的参数是给子函数的,设置判断的分数

三、函数的返回值

  • 函数必须要有返回值

  • 函数只能返回单一的值

  • 重点放在多值返回

返回值:

1.通过连接.拼接返回

2.通过数组返回

3.通过json返回,json是js对象自变量的字符串表示json_encode<->json_decode

4.序列化serialize方式返回值,serialize<->unserialize

  1. <?php
  2. // 1.字符串拼装
  3. function test1(): string{
  4. $name = 'admin';
  5. $code = '通过验证';
  6. return $name . $code;
  7. }
  8. echo test1(),'<hr>';
  9. // 2.通过数组返回
  10. function test2():array
  11. {
  12. $str1 = 'nanjing';
  13. $str2 = 'beijing';
  14. return ['point1' => $str1,'point2' => $str2];
  15. }
  16. print_r(test2());
  17. echo '<hr>';
  18. // 3.通过json返回,json是js对象字面量的字符串表示json_encode<->json_decode
  19. function test3():string{
  20. $code = 1;
  21. $message = '登录成功';
  22. return json_encode(['code'=>$code,'msg'=>$message]);
  23. //返回以json格式封装的字符串
  24. }
  25. // 还原后变为json的对象
  26. print_r(json_decode(test3()));
  27. echo '<hr>';
  28. // 4.序列化serialize方式返回,serialize<->unserialize
  29. function test4():string
  30. {
  31. $username = 'emagic';
  32. $sex = '男';
  33. return serialize(['username' => $username,'sex' => $sex]);
  34. }
  35. echo test4(),'<br>';
  36. //返回的是序列化编码的格式数据
  37. print_r(unserialize(test4()));
  38. // 反序列化后还原为数组
  39. echo '<hr>';

四、函数中的参数

1.值参数(默认)

2.引用参数:要在参数前添加区地址符&,函数内部对参数的更新实时映射到外部实际参数

3.默认参数:即便用户不给参数的时候就给定参数一个默认取值,避免函数报错

  • 凡是有默认值的参数必须写到没有默认值参数的后面

4.剩余参数:如调用参数的数量不固定(…$args)

  • 剩余参数用在函数的参数列表中:收集
  • 剩余参数用在函数的调用表达式中,是展开
  • array_sum为数组求和函数

5.回调函数,匿名函数,闭包

  • 异步编程中的函数的参数
  • 当函数的执行的时间和顺序无法预测时,通过事件或者回调来执行函数
  • 它的执行由父函数决定何时调用
  1. <?php
  2. // 值参数,默认方式
  3. function modf (int $a,int $b){
  4. return $a % $b;
  5. }
  6. echo modf(7,3);
  7. echo '<hr>';
  8. // 默认参数:即便用户不给参数的时候就给定参数一个默认取值,避免函数报错
  9. function getusername(string $username = 'admin'):string
  10. {
  11. return $username;
  12. }
  13. // 调用时不传参数会输出默认参数值
  14. echo getusername(),'<hr>';
  15. // 引用参数,在参数前面加上取地址符&
  16. function reffunc(&$parm1)
  17. {
  18. return $parm1 *= 2;
  19. //加上取地址符后的参数,其值变化也会使函数外部的值产生变化
  20. }
  21. $parm2 = 50; //parm2初始化是给50
  22. echo reffunc($parm2),'<br>';
  23. echo $parm2; //这里的parm2输出结果变为了100,不再是50了
  24. echo '<hr>';
  25. // 剩余参数
  26. // 当调用得参数 数量不确定时 参数前面加三个...
  27. function uncountable(...$args)
  28. {
  29. return array_sum($args);
  30. //array_sum为数组求和函数
  31. }
  32. $res = uncountable(1,2,3,4,5,6,7,8,9,10);
  33. print_r($res);

五、命名空间

  1. <?php
  2. // 函数的命名空间
  3. // 1. 命名空间
  4. namespace ns1{
  5. function calc(int $a, int $b):int
  6. {
  7. return $a * $b;
  8. }
  9. }
  10. // 这里分别在两个不同的空间ns1和ns2命名了一个同名的calc函数,解决了命名冲突问题
  11. namespace ns2 {
  12. function calc(int $a, int $b):int{
  13. return $a + $b;
  14. }
  15. }
  16. // 2. 全局空间中访问
  17. namespace{
  18. echo ns1\calc(3,5);
  19. echo '<hr>';
  20. echo ns2\calc(3,5);
  21. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议