博客列表 >PHP的函数类型、函数返回值、函数中的参数&回调函数的使用及函数的命名空间

PHP的函数类型、函数返回值、函数中的参数&回调函数的使用及函数的命名空间

嘬一口啊
嘬一口啊原创
2020年07月12日 23:08:46859浏览

php的函数

  • 函数的声明

  1. function 函数名(参数列表) {
  2. 函数体;由一条或多条语句组成,也可以为空
  3. }
  4. // 调用函数
  5. 函数名();
  6. 例:
  7. // 括号中的int是规定参数类型必须是整数型,:int是规定返回值必须是整数型
  8. function demo(int $a,int $b):int{
  9. // 将函数的执行结果返回到调用者
  10. return $a + $b;
  11. }
  12. // 调用函数
  13. // 按名称调用
  14. // 参数类型限制就是变量类型强制转换,把传递的参数转为整数型数值,如参数中有不可转为整数型数值的参数直接报错
  15. // 返回值类型限制相同
  16. echo demo(1,7); // 输出结果 8;
  1. 系统小函数:count():返回数组中元素的数目[就是数数组中的元素个数]
  2. 例:
  3. echo count([1,2,3]); // 输出 3;
  • 函数的类型

1.自定义函数
  1. 例:
  2. // $price价钱 $discount:折扣
  3. function TOTAL_PRICE(float $price,float $discount):float {
  4. return $price *= $discount; // 等同于$price = $price * $discount;
  5. }
  6. echo '实付钱='.TOTAL_PRICE(3000,0.8); // 输出 24000;
2.系统函数(很多可自行查阅手册,下方只是一个小例字)
  1. // 系统函数字符串截取函数mb_substr(截取变量名,截取开始数值,截取结束数值);
  2. $str = "函数调用机制,改进函数调用机制,通过优化参数传递环节,减少了一些指令";
  3. echo mb_substr($str,0,6); // 输出"函数调用机制"
3.可变函数
  1. // 将函数名作为变量值,通过变量名实现调用函数
  2. 例:
  3. // $price价钱 $discount:折扣
  4. function TOTAL_PRICE(float $price,float $discount):float {
  5. return $price *= $discount; // 等同于$price = $price * $discount;
  6. }
  7. // $demo的值就是函数名可以直接通过这个变量值来调用TOTAL_PRICE这个函数
  8. $demo = 'TOTAL_PRICE';
  9. echo '实付金额='.$demo(1000,0.5),'<br>'; // 输出 5000;
4.匿名函数
  1. // 拥有名称的函数叫做命名函数/或具名函数
  2. // 顾名思义无名称的函数就叫匿名函数
  3. // 匿名函数用个变量来承接
  4. // 注意匿名函数的结尾括号后面有个分号
  5. $变量名 = function (参数列表) {
  6. 函数体;
  7. }
  8. 例:
  9. $get = function (float $price,float $discount):float {
  10. return $price *= $discount;
  11. };
  12. echo '实付金额='.$get(500,0.9); // 输出 450;
5.匿名函数访问父作用域中的变量
  1. 例:
  2. // 这个父作用域是全局作用域
  3. $discount = 0.5;
  4. $pay = function (float $price,float $number)use($discount):float {
  5. // 总价
  6. $total_price = $price * $number;
  7. // 使用三元运算根据总价钱判断打折
  8. return $total_price > 2000 ? $total_price *= $discount : $total_price;
  9. };
  10. // 调用匿名函数
  11. echo '实付金额='.$pay(600,3); // 输出 "1800" 总价钱不够打折
  12. 例:
  13. // 父作用域是父函数
  14. $f = function($discount){
  15. $pay = function (float $price,int $number)use($discount):float {
  16. // 总价
  17. $total_price = $price * $number;
  18. // echo $total_price;
  19. // 使用三元运算根据总价钱判断打折
  20. return $total_price > 2000 ? $total_price *= $discount : $total_price;
  21. };
  22. // 将子函数以返回值得方式返给调用者
  23. return $pay;
  24. };
  25. echo '实际支付金额='.$f(0.5)(1000,5); // 输出 "2500"
  26. 理解$f(0.5)(1000,5):$f(0.5); $pay(1000,5);

函数的返回值

函数只能返回单一的值

1.多值通过字符串拼装返回
  1. 例:
  2. function demo1():string {
  3. $success = 1;
  4. $defeated = '失败';
  5. return $success.'<span style="color:blue">'.$defeated.'</span>';
  6. }
  7. echo demo1(); // 输出结果 1失败[这个失败是有蓝色字体样式的]
2.多值通过数组返回给调用者
  1. 例:
  2. function demo2():array {
  3. $success = 1;
  4. $defeated = '失败';
  5. return ['success'=>$success,'defeated'=>$defeated];
  6. }
  7. // 通过关联数组的键值来调用输出指定数组元素
  8. echo demo2()['success']; // 输出1 success的值就是1
3.通过json来返回值

json_encode(数组); 将数组已字符串的形式返回

json_decode(); 将对JSON格式的字符串转为数组格式

  1. 例:
  2. function demo3():string{
  3. $success = 1;
  4. $defeated = '失败';
  5. // json_encode(数组); 将数组已字符串的形式返回
  6. return json_encode(['success'=>$success,'defeated'=>$defeated]);
  7. }
  8. echo demo3(); // 输出 {"success":1,"defeated":"\u5931\u8d25"}
  9. 解释:输出中的\u5931\u8d25就是失败两个字
  10. // 输出查看当前函数值的输出类型
  11. echo gettype(demo3()),'<hr>'; // 输出 string 字符串型
  12. // 将对JSON格式的字符串转为数组格式
  13. print_r(json_decode(demo3(),true));
4.序列化方式

serialize(要序列化的数组名称) 用于序列化对象或数组,并返回一个字符串

反序列化: 还原[将被序列化成字符串格式的对象或数组,还原为数组格式]

unserialize(被序列化成字符串格式的对象或数组)

  1. 例:
  2. function demo4():string {
  3. $success = 1;
  4. $defeated = '失败';
  5. return serialize(['success'=>$success,'defeated'=>$defeated]);
  6. }
  7. echo demo4(); // 输出 "1失败" 字符串类型
  8. echo gettype(demo4()); // 输出查看类型 string
  9. // 反序列化
  10. print_r(unserialize(demo4())['success']); // 输出 "1" 在数组中的键值为success

php函数中的参数

1.值参数(也是默认参数)
  1. 例:
  2. // $arg是形参
  3. function demo1(float $arg):float {
  4. return $arg *= 2;
  5. }
  6. // 参数
  7. $val = 10;
  8. echo demo1($val); // $val是实参 // 输出结果 20
2.引用参数
  1. 例:
  2. // &:取地址符 这里的实参引用了实参的值存储地址
  3. function demo2(float &$arg):float {
  4. return $arg *= 2;
  5. }
  6. $val = 200;
  7. echo demo2($val),'<br>';
  8. // 输出这里查看$val有没有随着$arg值得变化而变化
  9. echo $val; // 输出400 值随着形参$arg的变化而发生变化
3.默认参数

默认参数必须写在没有默认参数的后面

  1. 例:
  2. function demo3(float $a,float $b,string $c ='+') {
  3. // 定义一个变量承接结果
  4. $res = '';
  5. switch ($c) {
  6. case '+':
  7. $res = "$a + $b =".($a+$b);
  8. break;
  9. case '-':
  10. $res = "$a + $b =".($a-$b);
  11. break;
  12. case '*':
  13. $res = "$a + $b =".($a*$b);
  14. break;
  15. case '/':
  16. $res = "$a + $b =".($a/$b);
  17. break;
  18. default:
  19. $res = '非法值';
  20. break;
  21. }
  22. return $res;
  23. }
  24. // 默认
  25. echo demo3(2,3),'<br>'; // 输出5 "进入假发运算中"
  26. // 条件减号
  27. echo demo3(2,3,'-'),'<br>'; // 输出-1 "进入了减法运算中"
  28. // 条件非法
  29. echo demo3(2,3,'&'); // 输出 "非法值" 因为非法制没有这个符号
4.剩余参数

作用:剩余参数用在函数的参数列表中: 收集;所有传入函数的参数放入一个数组中

  1. // 剩余番薯用在函数的形参(函数列表中)中
  2. 例:
  3. function demo4(...$args) {
  4. return $args;
  5. }
  6. print_r(demo4(1,2,3,4,5)); // 输出数组[1,2,3,4,5]
  7. // 剩余参数用在实参中
  8. // 将剩余参数用在函数的调用表达式中, 是: 展开
  9. 例:
  10. function demo5(...$args) {
  11. // array_sum();数组求和
  12. return array_sum($args);
  13. }
  14. $arr = [1,2,3,4,5,6,7];
  15. // 直接将一个数组一剩余参数的形势传入函数中进行求和运算
  16. $res = demo5(...$arr);
  17. print_r($res); // 输出 27 数组元素值的总和

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

array_map(回调函数名/回调函数,数组);

  1. 例:
  2. $data = range(1,100);
  3. $func = function($item) {
  4. if ($item % 2 === 0) return $item;
  5. };
  6. $arr = array_map($func,$data);
  7. echo '<pre>';
  8. print_r($arr);
  9. echo '</pre>';
  10. // 或简写[就是直接把匿名函数放进去]
  11. $data = range(1,100);
  12. $arr = array_map(function($item){
  13. if ($item % 2 === 0) return $item;
  14. }, $data);
  15. print_r($arr);

// array_filter(数组,回调函数名/回调函数);该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true,则把输入数组中的当前键值返回给结果数组。数组键名保持不变。

  1. // 去除数组中的空值
  2. 例:
  3. $data = range(1,100);
  4. $arr = array_map(function($item){
  5. if ($item % 2 === 0) return $item;
  6. }, $data);
  7. $res=array_filter($arr, function($item){
  8. return $item;
  9. });
  10. //
  11. echo '<pre>';
  12. print_r($res);
  13. echo '</pre>';

函数的命名空间

  1. 例:
  2. // 声明命名空间ns1并把函数demo1写入
  3. namespace ns1 {
  4. function demo1() {
  5. return __FUNCTION__;
  6. }
  7. }
  8. // 调用命名空阿ns1中的demo1()
  9. namespace {
  10. function demo2(){}
  11. echo ns1\demo1(); // 输出ns1\demo1
  12. }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议