Blogger Information
Blog 31
fans 0
comment 0
visits 30247
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
想说爱你不容易的php函数类型、参数、返回值
emy
Original
692 people have browsed it

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

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:那个截图印象中, 应该是上课我画的, 你要记住它
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post