函数在PHP中占十分重要的作用。函数是实现代码复用的重要方法。语法如下:
//函数定义function 函数名称(类型:参数列表):返回值类型 { //函数体 return 返回值; }
用一张图展示今天所学的内容:
一、函数的四种类型
1.自定义函数:用户根据业务需求创建。
语法:function getName(){...}
举例说明:
//限定了参数和返回值类型int 那么只能返回int function getPeople(int $a , int $b) : int { $c = $a+$b; return $c; } echo getPeople(10,15);
2.系统函数:系统自带的函数,无需用户自定义,可以直接使用。如:substr(), count()...
举例说明:
// 系统函数 $str = '真正力量来自它的函数'; // 截取字符串 echo mb_substr($str , 0 , 4); //输出 真正力量
3.可变函数:类同可变变量,将一个变量赋值为函数然后调用。语法:$funcName();
举例说明:
$funcName = 'myName'; echo '我的名字叫: ' . $funcName('emy ');
4.匿名函数: 也叫闭包, 可以访问父作用域的变量
语法:$f = function (){...}
举例说明:
$discount = 0.6; // $discount 的作用域是全局 $getAmount = function (float $money, int $num) use ($discount) : float { $amount = $money * $num; return $amount >= 2000 ? $amount * $discount : $amount; }; echo '实付金额: ' . $getAmount(100, 20); echo '<hr>'; // 如果父作用域又是一个函数 $f = function ($discount) { // 子函数 return function (float $money, int $num) use ($discount) : float { $amount = $money * $num; return $amount >= 2000 ? $amount * $discount : $amount; }; }; // $a = var_dump($f(0.6)); // echo gettype( $f); // $tmp = $f(0.6); // echo '实付金额: ' .$tmp(200, 20); echo '实付金额: ' .$f(0.6)(200, 20);
二、返回值,函数必须要有返回值,遵守原则:单值返回。
- return:可以返回任何类型的值,包括函数类型;
-无return: 遇到`}`也会返回, 默认返回`null` 。
如果要返回多值,有以下四种:
1.字符串拼接,将多个字符串结果拼接输出,string。用 ‘.’ 拼接 ""双引号可以解析里面的变量。
2.用数组返回结果,array。
3.用json字符串的方式返回结果,json:用 js 对象字面量的方式来表示数据,是一种轻量级通用的数据交换或传输格式。
4.用序列化字符串的方式返回,serialize。其实json也是一种序列化。
举例说明:
<?php //函数返回多个值 function getData() { $daxue= '中山大学'; $zone = 南校区; $score = '分数线'; // 1. 字符串拼接: 使用字符串拼接符 '.' // return "中山大学:".$daxue.",南校区:".$zone .",分数线:".$score ; // 2. 数组 : array // return ['中山大学'=>$daxue,'南校区'=>$zone ,'分数线'=>$score]; // 3. JSON 字符串 // json_encode():将PHP数据编码为json格式的字符串返回 // json_decode():对json格式的字符串进行解码 // return json_encode(['中山大学'=>$daxue,'南校区'=>$zone ,'分数线'=>$score]); // 4. serialize 序列化 return serialize(['中山大学'=>$daxue,'南校区'=>$zone ,'分数线'=>$score]); }; // 返回的字符串使用 echo // echo getData(); //返回的是数组 使用 print_r // print_r(getData()); //使用json格式返回的数据,需要使用 json_decode() 函数进行格式解码,默认解析成的是对象,加参数 true 之后解析为数组 // print_r(json_decode(getData(),true)); // 使用serialize 序列化传输的数据,需要解序列化 print_r(unserialize(getData()));
三、函数的四种参数: 调用者可以通过参数将数据传递到函数中,参数是以逗号分隔的表达式列表,参数按照从左到右的顺序求值。
1.值参数:默认传参方式。举例说明:
function demo1($a,$b){ return $a+$b; } echo demo1(10,15);
2.引用参数:改变原始调用参数值。举例说明:
$numbers=1000; //将第二个参数设置成引用参数 function demo2($a,&$b) { return $b+=$a; } //将$numbers传入到第二个参数 demo2(5000,$numbers); //显示$numbers的值,这时$c的值已经改变为2000 echo $numbers;
3.默认参数:调用时运行省略的参数。举例说明:
//将$numbers设置为默认参数初始值为1000 function demo3($a,$b,$numbers=1000) { return $a+$b+$numbers; } //当demo3的第三个参数未设置时$numbers的值为1000,所以结果为2100 echo demo3(500,600).'<br>'; //也可设置默认参数的值,此时$numbers的值为100,所以结果为1200 echo demo3(500,600,100);
4.剩余参数:调用参数数量不确定。用在函数的形参列表中,表示“收集”,将多个离散的参数打包到一个数组中处理。举例说明:
function demo4(...$args) : float { $sum = 0; // 计算所有参数相加 //方法1: // for($i = 0;$i < count($args);$i++){ // $sum +=$args[$i]; // }; // 方法2: $total = array_sum($args); return $sum; } // echo demo4(10,20,30,40,50); $arr = [10,80,90,20,10,70]; // ...:用在函数的调用参数列表中,表示“展开”,还原将一个数组展开成一个个离散的值 echo demo4(...$arr);
四、回调函数:在将来某一时刻,或某个事件发生时再执行。
五、命名空间
1.使用目录来整理文档, 允许将同名文档,存储在不同的目录下面即可。
2.不同目录下的同名文件,访问时必须带上的它的目录名称,以未区别。
3.命名空间采用类似的思想,同名函数,只要声明在不同空间中即可。
4.同样, 访问这些函数时, 也需要带上它的命名空间才可以。
六、总结:作为程序小白,对于PHP函数仍需要多看几次课程才能加深印象,特别是闭包这个知识点。什么时候用什么函数,怎么样回调,仍需努力搞懂,才能在后期运用。