博客列表 >PHP大牛成长之路:PHP函数的使用

PHP大牛成长之路:PHP函数的使用

周Sir-BLOG
周Sir-BLOG原创
2020年07月08日 01:01:26853浏览

1、函数的声明与调用

1.1、函数的声明/语法:

  1. // 使用function声明
  2. // 函数语法:
  3. // function 函数名(参数列表) {
  4. // 函数体
  5. // }

1.2、函数命名方法:

  • 小写字母/数字或下划线且不允许用数字开头(多个单词使用‘_’来分开)
  1. function get_user_name(int $user_id){}
  2. function get_password(int $user_id){}
  3. function error_msg(string $str){}

1.3、函数简单示例(声明与调用):

  1. //函数声明:求两个参数的和
  2. function sum(float $x,float $y) :float{
  3. return $x + $y;
  4. }
  5. //调用
  6. echo sum(10,10);
  7. //输出:20

2、函数类型

2.1、自定义函数

  • 由用户定义函数名及参数
  1. //函数声明:求两个参数的和
  2. function sum(float $x,float $y) :float{
  3. return $x + $y;
  4. }
  5. //调用
  6. echo sum(10,10);

2.2、系统函数

  • 系统自带,无需定义直接使用;
  1. // 1、所有的字符都转小写(针对英文字母)
  2. echo strtolower('ABCDEFG');
  3. // 2、字符串分割数组,语法:str_split(字符串,数组元素的长度)
  4. print_r(str_split("aaabbbccc",3));
  5. // 3、四舍五入
  6. echo round(3.5);

2.3、可变函数

  1. //函数声明:求两个参数的和
  2. function sum(float $x,float $y) :float{
  3. return $x + $y;
  4. }
  5. // 1、定义值为函数名称的变量
  6. $sum2='sum';
  7. // 2、使用可变变量输出函数
  8. echo $sum2(10,10);
  9. echo '<br>';
  10. // 使用函数输出结果相同
  11. echo sum(10,10);

2.4、匿名函数(也叫具名函数/闭包)

  1. //将一个没有函数名的函数赋值给一个变量
  2. $sum = function(float $x,float $y) :float{
  3. return $x + $y;
  4. };
  5. echo $sum(10,10);
  • 闭包可以从父作用域中继承变量
  1. $msg = 'hello';
  2. // 使用use()继承$msg变量
  3. $msg_str = function () use ($msg) {
  4. return $msg;
  5. };
  6. echo $msg_str();

3、函数的返回值

  • 函数必须要有返回值,正常情况下只能返回单一的值(如不能同时输出两个变量),可以通过以下方式返回不同类型的值:

3.1:通过字符串拼装

  1. function demo(): string
  2. {
  3. $status = 1;
  4. $msg= '成功';
  5. return $status . $msg;
  6. }
  7. echo demo();
  8. //输出:1成功

3.2:通过数组返回

  1. function demo(): array
  2. {
  3. $user_id =1;
  4. $user_name='张三';
  5. return ['id' => $user_id, 'name' => $user_name];
  6. }
  7. print_r(demo());
  8. // 输出:
  9. // Array
  10. // (
  11. // [id] => 1
  12. // [name] => 张三
  13. // )

3.3:通过json返回字符串

  1. function demo(): string
  2. {
  3. $user_id =1;
  4. $user_name='张三';
  5. return json_encode(['id' => $user_id, 'name' => $user_name]);
  6. }
  7. echo demo();
  8. // 输出:{"id":1,"name":"\u5f20\u4e09"}
  9. //也可以使用json_decode()转回数组;(不加第二个参数默认转换为对象)
  10. print_r(json_decode( demo(), true));

3.4:通过序列化方式返回字符串

  1. function demo(): string
  2. {
  3. $user_id =1;
  4. $user_name='张三';
  5. return serialize(['id' => $user_id, 'name' => $user_name]);
  6. }
  7. echo demo();
  8. // 输出:a:2:{s:2:"id";i:1;s:4:"name";s:6:"张三";}
  9. //a表示数组,2个元素,
  10. //第1个元素键名为id为string类型,长度是2,值为int类型,长度是1
  11. //第2个元素键名为name为string类型,长度是4,值为string类型,长度是6
  12. // 反序列化: 还原
  13. print_r(unserialize( demo()));

4、函数中的参数

4.1 普通参数

  1. //函数声明:求两个参数的和
  2. function sum(float $x,float $y) :float{
  3. return $x + $y;
  4. }
  5. //调用
  6. echo sum(10,10);
  7. //输出:20

指定了两个float类型参数x,y,未指定默认值

4.2 默认值参数

  1. //函数声明:求两个参数的和
  2. function sum(float $x,float $y=10) :float{
  3. return $x + $y;
  4. }
  5. //调用
  6. echo sum(5);
  7. //输出:15

指定了两个float类型参数x,y,其中y指定了默认值10;
凡是有默认值的参数,必须写到没有默认值参数的后面

4.3 引用参数,要在参数前添加取地址符&

  1. function sum(float &$y) :float{
  2. return $y*=2;
  3. }
  4. $p=5;
  5. //在函数参数中引用变量$p
  6. echo sum($p);
  7. //函数内部对参数的更新会实时映射到外部实际参数$p
  8. echo $p;
  9. //简单理解就是同步更新引用变量

4.4 剩余参数

  1. // 例如:一个数量不固定的数求和,参数前面加...
  2. function demo(...$num)
  3. {
  4. //array_sum为数组求和函数
  5. return array_sum($num);
  6. }
  7. // 定义数组
  8. $arr = [2,2,2,2,2];
  9. // 无论数组有多少个,全部进行计算
  10. $num_sum = demo(...$arr);
  11. echo $num_sum;

函数的命名空间

  • 函数在同一空间中,同样不允许有多个同名函数,就等同于一个文件夹里不允许有两个相同文件。(如一个文件夹里不能同时有两个11.txt)
  • 解决命名冲突:使用命名空间
  1. // 函数的命名空间
  2. namespace ns1 {
  3. function demo(){
  4. return '我是ns1的DEMO';
  5. }
  6. }
  7. namespace ns2 {
  8. function demo(){
  9. return '我是ns2的DEMO';
  10. }
  11. }
  12. // 全局空间: 匿名空间,默认空间
  13. namespace {
  14. function demo(){}
  15. echo ns1\demo();
  16. }

总结:

  • 函数的使用前期自学基本使用没有问题,通过学习,有了更系统的理解;
  • 对于回调函数,异步编程中的函数的参数还不能完全理解。
上一条:实例演示变量作用域下一条:ceshi
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议