Blogger Information
Blog 53
fans 3
comment 0
visits 46951
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP函数的声明与调用,函数的不同类型、返回值方式及参数分类
emagic
Original
1078 people have browsed it

一、函数的声明与调用

函数的含义:

  • 代码复用的重要手段
  • 函数名称以字母或下划线开头(不能以数字开头),标识符必须满足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. }
Correcting teacher:GuanhuiGuanhui

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