博客列表 >函数的声明与调用,参数,返回值及类型等

函数的声明与调用,参数,返回值及类型等

简行
简行原创
2020年07月08日 16:57:021174浏览
一.函数的声明与调用

1.函数声明语法

  1. <?php
  2. /*
  3. function 函数名称的标识符(参数) {
  4. 由代码语句组成,也可以为空的函数体
  5. }
  6. */

2.函数名命名规则:只允许字母数字或下划线且不允许用数字开头
function usename(){}

3.函数示例声明调用,输出:

  1. <?php
  2. //函数声明
  3. function usename($name):string //其中string是标识返回类型
  4. {
  5. return "用户名称是:".$name;
  6. }
  7. // 函数调用
  8. echo usename("admin");
二.函数类型

1.自定义类型 :开发者自己定义的函数

  1. <?php
  2. //自定义函数
  3. function wages(int $n,float $money):float
  4. {
  5. return $n * $money;
  6. }
  7. echo "本月工资=".wages(20,100);

2.系统函数:可直接使用

  1. <?php
  2. //系统函数
  3. $num = 5;
  4. $arr = [5,6,7,9,1];
  5. //判断一个变量值是否在一个数组中,是则返回bool(true),反之测返回bool(false)
  6. var_dump(in_array($num, $arr));

3.可变函数

  1. <?php
  2. function wages2(int $n,float $money):float
  3. {
  4. return $n * $money;
  5. }
  6. $funname = "wages2";
  7. echo "本月工资=".$funname(15,100);
  8. //输出 本月工资=1500

4.匿名函数(在php中也称为”闭包”: 可以访问父作用域中的变量)

  • 常规匿名函数
  1. <?php
  2. $getwage =function(int $n,float $money):float
  3. {
  4. return $n * $money;
  5. };
  6. //输出 本月工资=750
  7. echo "本月工资=" . $getwage(15,50);
  • 当前父作用域是全局变量
  1. <?php
  2. //当前父作用域是全局变量
  3. $dis = 250;//个税
  4. $getw = function(int $n,float $money) use($dis):float
  5. {
  6. $tap = $n * $money;
  7. return $tap>5000 ? ($tap-$dis) : $tap;
  8. };
  9. //输出 本月工资=5750
  10. echo "本月工资=" . $getw(30,200);
  • 父作用域是父函数
  1. <?php
  2. $f = function($distion){
  3. $g = function(int $n,float $money) use($distion):float
  4. {
  5. $tap = $n * $money;
  6. return $tap>500 ? ($tap-$distion) : $tap;
  7. };
  8. //将子函数以返回值的方式返回给调用者
  9. return $g;
  10. };
  11. //输出 本月工资=5700
  12. echo "本月工资=" . $f(300)(30,200);
三.函数的返回值

1.函数必须要有返回值,且函数只能返回单一的值;

2.函数的多值返回方法

  • 字符串返回
  1. <?php
  2. // 通过字符串拼装
  3. function index1():string
  4. {
  5. $status = 1;
  6. $msg = "登录成功!";
  7. return $status.$msg;
  8. }
  9. //输出 1登录成功!
  10. echo index1();
  • 数组返回
  1. <?php
  2. // 数组返回
  3. function index2():array
  4. {
  5. $array = [1,"编辑成功!"];
  6. return $array;
  7. }
  8. //输出 1===编辑成功!
  9. echo index2()[0]."===".index2()[1];
  • json格式返回
  1. <?php
  2. //json返回
  3. function index3():string
  4. {
  5. $array = ["status"=>1,"msg"=>"编辑成功!"];
  6. //json_encode():对象/数组 转 json, 成功返回 json 编码的 string ,失败返回 false
  7. return json_encode($array);
  8. }
  9. //json_decode(): son 转 对象/数组 , 当第二个参数为true返回 array ,默认是false返回object。
  10. $data = json_decode(index3(),true);
  11. //输出 array(2) { ["status"]=> int(1) ["msg"]=> string(15) "编辑成功!" }
  12. var_dump($data);
  • 序列化方式返回
  1. <?php
  2. // 序列化方式返回
  3. function index4():string
  4. {
  5. $array = ["status"=>1,"msg"=>"编辑成功!"];
  6. //serialize():对象/数组 转 序列号格式
  7. return serialize($array);
  8. }
  9. //unserialize(): 反序列化(还原)
  10. //输出 array(2) { ["status"]=> int(1) ["msg"]=> string(15) "编辑成功!" }
  11. var_dump(unserialize(index4()));
四.函数的参数

1.值参数,也是默认

  1. <?php
  2. //值参数
  3. function param(int $data):int
  4. {
  5. return $data +=10;
  6. }
  7. //输出 10
  8. echo param(10);

2.引用参数:在参数前添加取地址符&

  1. <?php
  2. function param1(int &$data):int
  3. {
  4. // 函数内部对参数的更新会实时映射到外部实际参数
  5. return $data +=10;
  6. }
  7. $val =100;
  8. //输出 110
  9. echo param1($val),"<br>";
  10. //输出 110 $val值会随param1()函数返回值变化而变化,相当于取$data
  11. echo $val;

3.默认参数

  1. <?php
  2. //默认参数:凡是有默认值的参数,必须写到没有默认值参数的后面
  3. function param2(float $money,string $name="admin" ):string
  4. {
  5. return "这几天".$name."收获".$money."元";
  6. }
  7. echo param2(120); //$name为默认参数,即没传参数则使用“admin”
  8. //输出 这几天admin收获120元

4.剩余参数

  1. <?php
  2. //调用的参数不固定
  3. function param_sum(...$day):string
  4. {
  5. $str = "";
  6. for($i=0;$i<count($day);$i++){
  7. $str .= $day[$i].";";
  8. }
  9. return $str;
  10. }
  11. $arr =["星期一","星期二","星期三","星期四"];
  12. echo param_sum(...$arr);
  13. //输出 星期一;星期二;星期三;星期四;
五.函数的命名空间
  1. <?php
  2. namespace ns1 {
  3. function index($name)
  4. {
  5. return "ns1中的index的" . $name;
  6. }
  7. }
  8. namespace ns2 {
  9. function index($username)
  10. {
  11. $res = \ns1\index($username);
  12. return "ns2中的index的调用".$res;
  13. }
  14. }
  15. // 全局空间: 匿名空间,默认空间
  16. namespace {
  17. echo ns2\index("admin");
  18. // 输出 ns2中的index的调用ns1中的index的admin
  19. }

总结

对回调函数,异步的流程使用不太清楚

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