php 回调函数的作用域,想说爱你不容易的php函数类型、参数、返回值

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

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

//函数体

return 返回值;

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

c1e6c8d7cc68bbe6cefe6a47a0494b87.png

一、函数的四种类型

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值