批改状态:合格
老师批语:咱们的教学, 尽可能把一个知识点讲透, 不在多而在精
任何编程语言,都绕不开函数,只要有编程就会有函数,函数的最终目的就是实现代码的复用,减轻代码沉余。下面通过几个案例,带大家认识一下函数的基本概念
function getPrice(float $arg) : float{echo 'hello the world','<br>';return $arg *= 2;}echo getPrich(2);
代码效果图:
hello the world4
这是一个基本的函数,用中文翻译整个,可以得出如下
function 函数名(参数){功能块;}// 调用函数如下函数名(参数);
通过这个案例,我们可以知道函数的基本结构,那么函数肯定不仅仅只有这些,有自定义的函数,也有系统的函数,等等,我们来讲解一下
函数类型一共有四种,每种定义方式都不一样
| 序号 | 类型 | 语法 | 解释 |
|---|---|---|---|
| 1 | 自定义函数 | function 函数名(){...} |
用户自定义的函数 |
| 2 | 系统函数 | mb_substr()... |
系统自带的函数,不需要定义,直接使用 |
| 3 | 可变函数 | $funcName = 函数名 |
函数名赋给变量,变量调用函数 |
| 4 | 匿名函数 | $a = function (){...} |
函数表达式 |
//需要声明函数名称,function getPrice(float $money, float $discount) : float{return $money * $discount;}// 通过函数名来调用echo '实付金额' . getPrice(100,0.1);echo '<hr>';
代码效果图:
实付金额10
$str = '我是一个中国人';// 系统函数不要声明,直接把要处理的数据传进去即可echo mb_substr($str , 0 , 5);echo '<hr>';
代码效果图:
我是一个中
更多系统函数可到手册中查看
// 将上面定义的函数,赋给一个变量,用变量来调用$funcName = 'getPrice';// 用变量来调用echo '实付金额:' . $funcName( 400, 0.4);echo '<hr>';
代码效果图:
实付金额:160
$discount = 0.8;// 将使用的变量通过use传入函数$getAmount = function (float $money, int $num) use ($discount) :float{$amount = $money * $num;return $amount >= 2000 ? $amount * $discount : $amount;};echo '实付金额: ' . $getAmount(100, 10);echo '<hr>';
代码效果图:
实付金额:1000
通过几个案例我们可以知道,函数有四种类型,每种类型定义的方式不一样,作用也不一样,我们可以看到在function后面还紧跟着一个括号,这个括号里面就是我们要传入的参数,这个参数类型也有很多种。
函数参数类型,也有四种,和函数类型碰巧数量一致,我们来通过来了解一下。
| 序号 | 类型 | 语法 | 解释 |
|---|---|---|---|
| 1 | 值参数 | function demo1(float $arg) : float |
把数值传入函数 |
| 2 | 引用函数 | function demo2(float &$arg) : float |
引用变量的地址 |
| 3 | 默认参数 | function demo3(float $a, float $b, string $opt = '+') |
不传入数据进入函数,函数默认的参数 |
| 4 | 剩余参数 | function demo6(...$args) : float |
当有多个值传入函数,函数的处理 |
function demo1(float $arg) : float{return $arg *= 2;}$value = 100;echo demo1($value),'<br>';echo $value;echo '<hr>';
代码效果图:
200100
值参数非常的简单,就是将变量的值,传入函数,理解起来非常简单,就是将变量的值,传进函数,函数进行处理,函数不会对原来的变量进行改变
function demo2(float &$arg) : float{return $arg *= 2;}$value = 100;echo demo2($value). '<br>';echo $value;echo '<hr>';
代码效果图:
200200
引用函数的地址,交给函数,此时我们可以发现,原来的值也发生了改变,这是为什么呢?这是因为我们引用了函数的地址,对变量的指向的数值进行了更新。
默认参数,就是,我们不传入参数,函数使用的默认的参数
function demo3(float $a, float $b, string $opt = '+'){$res = 0;switch($opt) {case '+':$res = "$a + $b =" . ($a + $b);break;case '-':$res = "$a - $b" . ($a - $b);break;case '*':$res = "$a * $b=" . ($a * $b);break;case '/':$res = "$a / $b" . ($a / $b);break;default:$res = '非法操作符';}return $res;}echo demo3(10,20),'<br>';echo demo3(10,20,'*');echo demo3(10,30,'^');echo '<hr>';
代码效果图:
30200非法操作符
所谓的剩余参数,就是当我们输入多个参数时,函数并没有声明,函数会如何处理。
// 函数声明变量时,用数组声明,前面用...表示多个function demo6(...$args) : float{// 用数组求和函数,也就是系统自定义的函数,进行处理return array_sum($args);}// print_r(demo6(3,4,7,8,89,23));echo demo6(1,2,3,4,5,6,7,8,9),'<br>';$arr = [1,2,3,4,5,6,7,8,9,10];print_r(demo6(...$arr));
代码效果图:
4555
通过剩余参数,我们可以知道,当函数有很多变量时,可以通过数组来接收,不需要定义很多参数来,非常的智能,解决了不规则参数的处理。既然有参数,那就有返回值,返回值也有很多类型
函数的返回值要遵循单值返回的原则。
| 序号 | 场景 | 描述 |
|---|---|---|
| 1 | return |
可以返回任何类型的值 |
| 2 | 无return |
默认返回null |
| 序号 | 方式 | 描述 |
|---|---|---|
| 1 | string |
字符串拼接 |
| 2 | array |
数组 |
| 3 | json |
JSON 字符串 |
| 4 | serialize |
序列化字符串 |
function demo1() : string{$status = 1;$message = '成功';// return只能返回单值// return $status , $message;return $status . ':' . $message;};
代码效果图:
1成功
通过.拼接,输出不同的变量,达到多值返回的目的。
function demo2() : array{return ['status'=>1, 'message'=>'成功'];}$res = print_r(demo2(), true);printf('<pre>%s</pre>', $res);echo '<hr>';
代码效果图:
1成功
//json:是用对象字面量的方式来表示数据,是一种轻量级通用的数据交换或传输方式//json本质上就是一个具有一定结构和格式的字符串,不过这种格式得到了公认function demo3() : string{return json_encode(['status'=>1, 'message' => '成功']);}echo demo3();$data = demo3();$var = json_encode($data, true);print_r($var);echo '<hr>';
代码效果图:
{"status":1,"message":"\u6210\u529f"}"{\"status\":1,\"message\":\"\\u6210\\u529f\"}"
function demo4() : string{return serialize(['status' =>1,'message'=>'成功']);}echo demo4();echo '<hr>';
代码效果图:
a:2:{s:6:"status";i:1;s:7:"message";s:6:"成功";}
到这里函数的类型,参数类型,返回值类型都已经讲解完了,这只是一些基本知识,要想更深的理解,还需要更多的使用和运用。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号