函数在PHP中占十分重要的作用。函数是实现代码复用的重要方法。语法如下://函数定义function

函数名称(类型:参数列表):返回值类型

{
//函数体
return 返回值;
}

用一张图展示今天所学的内容:

function返回值怎么设置_字符串

一、函数的四种类型

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 '
'; 
 
// 如果父作用域又是一个函数
$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).'
';//也可设置默认参数的值,此时$numbers的值为100,所以结果为1200
echo demo3(500,600,100);

4.剩余参数:调用参数数量不确定。用在函数的形参列表中,表示“收集”,将多个离散的参数打包到一个数组中处理。举例说明:

function demo4(...$args) : float
{
$sum = 0;
// 计算所有参数相加
//方法1:
// for($i = 0;$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函数仍需要多看几次课程才能加深印象,特别是闭包这个知识点。什么时候用什么函数,怎么样回调,仍需努力搞懂,才能在后期运用。