博客列表 >想说爱你不容易的php函数类型、参数、返回值

想说爱你不容易的php函数类型、参数、返回值

emy
emy原创
2020年04月22日 16:33:56686浏览

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

//函数定义function 
函数名称(类型:参数列表):返回值类型
{    
//函数体    
return 返回值;
}

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

hansu.jpg

一、函数的四种类型

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函数仍需要多看几次课程才能加深印象,特别是闭包这个知识点。什么时候用什么函数,怎么样回调,仍需努力搞懂,才能在后期运用。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议