批改状态:合格
老师批语:函数的返回值很有意思, 值得研究
定义:函数是实现代码复用的重要方法,在所有编程语言中均如此
代码实例:
//函数定义function 函数名称(类型:参数列表):返回值类型{//函数体return 返回值;};
| 序号 | 名称 | 描述 |
|---|---|---|
| 1 | function |
声明函数 |
| 2 | 函数名称 |
复合 PHP 标识符命名规范,不区分大小写 |
| 3 | 参数列表 |
另个或多个接收外部传入到函数的变量 |
| 4 | {... |
创建出一个封闭的函数作用域 |
| 5 | 函数体 |
由零个或多个合法的 PHP 语句组成 |
| 6 | return 值 |
将执行结果返回函数调用者[可选] |
| 7 | ...} |
函数执行结束,如果没有 return,则返回 null |
| 序号 | 类型 | 语法 | 描述 |
|---|---|---|---|
| 1 | 自定义函数 | function getMess(){...} |
用户根据业务需求创建 |
| 2 | 系统函数 | gettype(),date() |
也叫预定义函数,不必声明直接调用 |
| 3 | 可变函数 | $funcName() |
函数名使用变量表示 |
| 4 | 匿名函数 | $f = function(){...} |
也叫“闭包”或“函数表达,常用做回调函数处理” |
// 1. 自定义函数// 自定义一个函数addNmu() ,计算两数之和并返回function myName(string $name) : string{return "我的名字叫做".$name;};// 调用并输出echo myName('wen');echo '<hr>';// 2. 系统函数//date() 获取当前系统时间echo date('Y-m-d H:s:i');echo '<hr>';// 3. 可变函数//定义一个变量等于函数名$funcName = 'myName';echo $funcName('yu');echo '<hr>';// 4. 匿名函数:又叫闭包,可以访问父作用域的变量//形式1:父作用域是全局$age = 18;// 闭包访问父作用域变量格式:在参数后 加 use ($age),自定义函数访问父作用域变量使用 global $age;$myInter = function(string $name) use ($age) : string{return "我的名字叫做".$name.",我今年".$age;};echo $myInter('goodboy');echo '<br>';//形式2:父作用域又是函数$mess = function($age){//子函数$myInter = function(string $name) use ($age) :string{return "我的名字叫做".$name.",我今年".$age;};return $myInter;};//因为$mess() 返回的是一个闭包对象//调用方法:echo $mess(18)('goodgood');
| 序号 | 场景 | 描述 |
|---|---|---|
| 1 | return |
可以返回任何类型的值,包括函数类型 |
| 2 | 无return |
遇到}也会返回,默认返回null |
//returnfunction addOne(int $a,int $b) : string{//显示返回return "$a + $b =".($a+$b);};//无 returnfunction addTwo(int $a,int $b){//隐式返回无 returnecho "$a + $b =".($a+$b);};
| 序号 | 返回值类型 | 描述 |
|---|---|---|
| 1 | string |
字符串拼接 |
| 2 | array |
数组 |
| 3 | json |
JSON 字符串 |
| 4 | serialize |
序列化字符串 |
//函数返回多个值function getData(){$name = 'wen';$age = 18;$sex = 'man';// 1. 字符串拼接: 使用字符串拼接符 '.'// return "姓名:".$name.",年龄:".$age.",性别:".$sex;// 2. 数组 : array// return ['姓名'=>$name,'年龄'=>$age,'性别'=>$sex];// 3. JSON 字符串// json_encode():将PHP数据编码为json格式的字符串返回// json_decode():对json格式的字符串进行解码// return json_encode(['姓名'=>$name,'年龄'=>$age,'性别'=>$sex]);// 4. serialize 序列化return serialize(['姓名'=>$name,'年龄'=>$age,'性别'=>$sex]);};// 返回的字符串使用 echo// echo getData();//返回的是数组 使用 print_r// print_r(getData());//使用json格式返回的数据,需要使用 json_decode() 函数进行解码,默认解析成的是对象,加参数 true 之后解析为数组// print_r(json_decode(getData(),true));// 使用serialize 序列化传输的数据,需要解序列化print_r(unserialize(getData()));
json:是用 js 对象字面量的方式来表示数据,是一种轻量级通用的数据交换或传输格式
json 本质上就是一个具有一定结构和格式的字符串,不过这种格式得到了公认,几乎所有编程语言都有支持它的接口
json 也是一种序列化
参数类型
| 序号 | 类型 | 描述 |
|---|---|---|
| 1 | 值参数 | 默认传参方式 |
| 2 | 引用参数 | 改变原始调用参数值 |
| 3 | 默认参数 | 调用时运行省略的参数 |
| 4 | 剩余参数 | 调用参数数量不确定 |
<?php//函数参数// 1. 值参数 : 默认function demo1(float $arg) : float{$arg = $arg * 2;return $arg;};$value = 100;echo demo1($value),'<br>';echo $value;// 在函数中改变了调用参数的值,但原始调用参数并没有发生变化echo '<hr>';// 2. 引用参数function demo2(float &$arg) : float{$arg *=2;return $arg;}$value = 200;echo demo2($value),'<br>';echo $value;// 如果在参数前面使用了取地址符 '&',则会改变原始调用参数的值echo '<hr>';// 3. 默认参数:默认参数必须写在必选参数后面function demo3(string $name,int $age,string $sex='保密') : string{return "我的名字叫做".$name.",我今年".$age.",我的性别".$sex;};echo demo3('o(∩_∩)o 哈哈',18);echo '<hr>';// 4. 剩余参数//...: 参数归纳//...:用在函数的形参列表中,表示“收集”,将多个离散的参数打包到一个数组中处理function demo4(...$args) : float{$total = 0;// 计算所有参数之和//方法1:// for($i = 0;$i < count($args);$i++){// $total +=$args[$i];// };// 方法2:$total = array_sum($args);return $total;}// echo demo4(1,2,3,4,5);$arr = [1,5,7,9,3,6];// ...:用在函数的调用参数列表中,表示“展开”,还原将一个数组展开成一个个离散的值echo demo4(...$arr);
| 语法 | 类型 | 执行方式 | 应用场景 |
|---|---|---|---|
| 匿名函数 | 闭包Closure |
异步 | 函数参数 |
-代码实例:
//回调函数$date = ['html5','css3','javscript','jquery','php'];//方式1:普通函数写法function repeat($arr){//把所有字符都大写return strtoupper($arr);}//将用户自定义函数作用到给定数组的每个值上,返回新的值。print_r(array_map('repeat',$date));echo '<hr>';//方式2:定义一个匿名函数// ucfirst() 字符串首字母大写$mess = print_r(array_map(function($arg){return ucfirst($arg);},$date));
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号