博客列表 >了解并演示函数的声明,返回值,参数和命名空间(0707)

了解并演示函数的声明,返回值,参数和命名空间(0707)

丶久而旧之丶
丶久而旧之丶原创
2020年07月19日 00:57:39689浏览

函数

  • 函数:代码复用的重要手段
  • 变量:数据复用的重要手段

函数语法

1.函数声明

  • 函数样式:function 函数名称标识符(参数){函数体,由一条或多条语句组成也可以为空}

  • 函数标识符:必须满足 php 标识符的基本要求,只允许字母,数字或下划线且不允许数字开头

2.自定义函数

  1. <?php
  2. function sum(int $a, int $b){
  3. return "$a+$b=". ($a+$b);
  4. }
  5. echo sum(10,20);

3.系统函数

  1. $str = '零基础开始,能解决常规业务逻辑,PHP操作MySQL增删改查';
  2. // substr用字节获取一个中文有3个字节
  3. echo substr($str, 0, 6),'<hr>';//返回'零基'
  4. // mb_substr:处理多字节
  5. echo mb_substr($str, 0, 6),'<hr>';//返回'零基础开始,'

4.可变函数(把函数名称定义到一个变量中,通过变量来调用函数)

  1. $s = 'sum';
  2. function sum(int $a, int $b){
  3. return "$a+$b=". ($a+$b);
  4. }
  5. echo $s(10,20),'<hr>';//返回结果10+20=30

5.匿名函数(把函数定义到变量)

  1. $s = function (int $a, int $b){
  2. return "$a+$b=". ($a+$b);
  3. };
  4. echo $s(10,20),'<hr>';//返回结果10+20=30
匿名函数:在 php 中也称为’闭包’可以访问父作用域中的变量
  • 访问全局变量可以用’use(\$C)’引入全局变量
  1. $c = 5;
  2. $s = function (int $a, int $b) use ($c){
  3. return "($a+$b)*$c=". ($a+$b)*$c;
  4. };
  5. echo $s(10,20),'<hr>';
  • 父作用域是父函数
  1. $a = function($c){
  2. $s = function (int $a, int $b) use ($c){
  3. return "($a+$b)*$c=". ($a+$b)*$c;
  4. };
  5. //把$c的值返回给调用者
  6. return $s;
  7. };
  8. echo $a(5)(10,20);

函数的返回值

  • 函数必会有返回值
  • 函数只能返回单一的值
  • 函数需要返回值时需要通过一些方法返回

多值返回

1.用字符串拼接方式返回多值
  1. function payment()
  2. {
  3. $money = '商品总计为5000';
  4. $rebate = '可以享受9折优惠';
  5. return $money . $rebate;
  6. }
  7. echo payment();

2.用过数组方式返回多值
  1. function payment1()
  2. {
  3. $money = '商品总计为5000';
  4. $rebate = '可以享受9折优惠';
  5. return [$money,$rebate];
  6. }
  7. $arr= print_r (payment1(),true);
  8. echo '<pre>'.$arr.'</pre>';
  9. echo '<hr>';

3.通过json方式(是js对象字面量的字符串表示)
  • 返回前端可以很好的被js解析,在PHP中可通过json_decode还原成对象
  1. function payment2()
  2. {
  3. $money = '商品总计为5000';
  4. $rebate = '可以享受9折优惠';
  5. return json_encode(['mon'=>$money,'reb'=>$rebate]);
  6. }
  7. echo payment2(),'<br>';
  8. // 还原成对象
  9. $data = json_decode(payment2());
  10. print_r($data);
  11. echo '<hr>';

4.通过序列化方式返回多值(序列化后方便存储和传输)
  1. function payment3()
  2. {
  3. $money = '商品总计为5000';
  4. $rebate = '可以享受9折优惠';
  5. return serialize(['mon'=>$money,'reb'=>$rebate]);
  6. }
  7. echo payment3(),'<br>';
  8. // 用反序列化还原
  9. print_r (unserialize(payment3()));
  10. echo '<hr>';

函数的参数

1.值参数:默认方式

  1. 1.值参数:默认
  2. function sum($a)
  3. {
  4. return $a *= 2;
  5. }
  6. $b = 20;
  7. echo sum($b),'<br>';
  8. echo $b,'<hr>';

2.引用参数:函数内部参数的更新会实时映射代外部参数

  1. function sum1(&$a)
  2. {
  3. return $a *= 2;
  4. }
  5. $b = 20;
  6. echo sum1($b),'<br>';
  7. echo $b,'<hr>';

3.默认参数

  1. function sum2($a=10,$b=5,$c = '+')
  2. {
  3. $d=0;
  4. switch($c){
  5. case '+':
  6. $d = "$a+$b=".($a+$b);
  7. break;
  8. case '-':
  9. $d = "$a-$b=".($a-$b);
  10. break;
  11. case '*':
  12. $d = "$a*$b=".($a*$b);
  13. break;
  14. case '/':
  15. $d = "$a/$b=".($a/$b);
  16. break;
  17. default:
  18. $d = '非法字符';
  19. }
  20. return $d;
  21. }
  22. echo sum2(),'<hr>';//没有实参,使用默认参数
  23. echo sum2(5,20,'*'),'<hr>';
  24. echo sum2(30),'<hr>';//实参数量少于形参时从左往右覆盖,没有实参的就使用默认参数

4.剩余参数(不确定参数数量可以用’…变量’当做一个容器用来装参数)

  1. // ...用在函数内部是收集
  2. function sum1(...$arr)
  3. {
  4. // 数组求和
  5. return array_sum($arr);
  6. }
  7. echo sum1(1,2,3,4,5),'<hr>';
  8. // 用在表达式中是展开
  9. $a = [1,2,3,4,5,6,7,8,9];
  10. echo sum1(...$a),'<br>';

5.回调函数(用于异步编程中的函数参数)

  1. $data = range(1,20);
  2. // 使用回调函数
  3. $a = [1,false,3,'',2,0,4,];
  4. $arr = array_map(function($a){
  5. if($a % 2 === 0)return $a;
  6. },$data);
  7. // 过滤空值
  8. function tru($v){
  9. if($v){
  10. return true;
  11. }else{
  12. return false;
  13. }
  14. }
  15. $arrs = array_filter($arr,'tru');
  16. $as = array_filter($a,'tru');
  17. print_r(array_values($arrs));
  18. echo '<hr>';
  19. print_r(array_values($as));

函数的命名空间

  • 需要使用同名函数时必须创建命名空间

  • 脚本中只要创建了命名空间那么所有php代码必须写在命名空间中

  • 访问必须在全局空间(namespace)中进行访问

1.没使用命名空间有同名函数就会报错

  1. function arr(){
  2. }
  3. function arr(){
  4. }

2.使用命名空间(如果要访问时必须在全局空间(namespace)中访问)

  1. namespace name1{
  2. function arr(){
  3. return 'php中文网';
  4. }
  5. }
  6. namespace name2{
  7. function arr(){
  8. }
  9. }
  10. // namespace是全局(匿名)空间,访问必须这里面访问
  11. namespace{
  12. echo name1\arr();
  13. }

总结

1.了解函数的创建规则
2.函数需要返回多值时应该如何操作
3.对于回调函数还需了解和其使用的场景
4.对于函数的参数了解和熟悉

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议