Blogger Information
Blog 48
fans 0
comment 0
visits 34176
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
了解并演示函数的声明,返回值,参数和命名空间(0707)
丶久而旧之丶
Original
688 people have browsed it

函数

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

函数语法

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.对于函数的参数了解和熟悉

Correcting teacher:天蓬老师天蓬老师

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