函数
- 函数:代码复用的重要手段
- 变量:数据复用的重要手段
函数语法
1.函数声明
函数样式:function 函数名称标识符(参数){函数体,由一条或多条语句组成也可以为空}
函数标识符:必须满足 php 标识符的基本要求,只允许字母,数字或下划线且不允许数字开头
2.自定义函数
<?php
function sum(int $a, int $b){
return "$a+$b=". ($a+$b);
}
echo sum(10,20);
3.系统函数
$str = '零基础开始,能解决常规业务逻辑,PHP操作MySQL增删改查';
// substr用字节获取一个中文有3个字节
echo substr($str, 0, 6),'<hr>';//返回'零基'
// mb_substr:处理多字节
echo mb_substr($str, 0, 6),'<hr>';//返回'零基础开始,'
4.可变函数(把函数名称定义到一个变量中,通过变量来调用函数)
$s = 'sum';
function sum(int $a, int $b){
return "$a+$b=". ($a+$b);
}
echo $s(10,20),'<hr>';//返回结果10+20=30
5.匿名函数(把函数定义到变量)
$s = function (int $a, int $b){
return "$a+$b=". ($a+$b);
};
echo $s(10,20),'<hr>';//返回结果10+20=30
匿名函数:在 php 中也称为’闭包’可以访问父作用域中的变量
- 访问全局变量可以用’use(\$C)’引入全局变量
$c = 5;
$s = function (int $a, int $b) use ($c){
return "($a+$b)*$c=". ($a+$b)*$c;
};
echo $s(10,20),'<hr>';
- 父作用域是父函数
$a = function($c){
$s = function (int $a, int $b) use ($c){
return "($a+$b)*$c=". ($a+$b)*$c;
};
//把$c的值返回给调用者
return $s;
};
echo $a(5)(10,20);
函数的返回值
- 函数必会有返回值
- 函数只能返回单一的值
- 函数需要返回值时需要通过一些方法返回
多值返回
1.用字符串拼接方式返回多值
function payment()
{
$money = '商品总计为5000';
$rebate = '可以享受9折优惠';
return $money . $rebate;
}
echo payment();
2.用过数组方式返回多值
function payment1()
{
$money = '商品总计为5000';
$rebate = '可以享受9折优惠';
return [$money,$rebate];
}
$arr= print_r (payment1(),true);
echo '<pre>'.$arr.'</pre>';
echo '<hr>';
3.通过json方式(是js对象字面量的字符串表示)
- 返回前端可以很好的被js解析,在PHP中可通过json_decode还原成对象
function payment2()
{
$money = '商品总计为5000';
$rebate = '可以享受9折优惠';
return json_encode(['mon'=>$money,'reb'=>$rebate]);
}
echo payment2(),'<br>';
// 还原成对象
$data = json_decode(payment2());
print_r($data);
echo '<hr>';
4.通过序列化方式返回多值(序列化后方便存储和传输)
function payment3()
{
$money = '商品总计为5000';
$rebate = '可以享受9折优惠';
return serialize(['mon'=>$money,'reb'=>$rebate]);
}
echo payment3(),'<br>';
// 用反序列化还原
print_r (unserialize(payment3()));
echo '<hr>';
函数的参数
1.值参数:默认方式
1.值参数:默认
function sum($a)
{
return $a *= 2;
}
$b = 20;
echo sum($b),'<br>';
echo $b,'<hr>';
2.引用参数:函数内部参数的更新会实时映射代外部参数
function sum1(&$a)
{
return $a *= 2;
}
$b = 20;
echo sum1($b),'<br>';
echo $b,'<hr>';
3.默认参数
function sum2($a=10,$b=5,$c = '+')
{
$d=0;
switch($c){
case '+':
$d = "$a+$b=".($a+$b);
break;
case '-':
$d = "$a-$b=".($a-$b);
break;
case '*':
$d = "$a*$b=".($a*$b);
break;
case '/':
$d = "$a/$b=".($a/$b);
break;
default:
$d = '非法字符';
}
return $d;
}
echo sum2(),'<hr>';//没有实参,使用默认参数
echo sum2(5,20,'*'),'<hr>';
echo sum2(30),'<hr>';//实参数量少于形参时从左往右覆盖,没有实参的就使用默认参数
4.剩余参数(不确定参数数量可以用’…变量’当做一个容器用来装参数)
// ...用在函数内部是收集
function sum1(...$arr)
{
// 数组求和
return array_sum($arr);
}
echo sum1(1,2,3,4,5),'<hr>';
// 用在表达式中是展开
$a = [1,2,3,4,5,6,7,8,9];
echo sum1(...$a),'<br>';
5.回调函数(用于异步编程中的函数参数)
$data = range(1,20);
// 使用回调函数
$a = [1,false,3,'',2,0,4,];
$arr = array_map(function($a){
if($a % 2 === 0)return $a;
},$data);
// 过滤空值
function tru($v){
if($v){
return true;
}else{
return false;
}
}
$arrs = array_filter($arr,'tru');
$as = array_filter($a,'tru');
print_r(array_values($arrs));
echo '<hr>';
print_r(array_values($as));
函数的命名空间
需要使用同名函数时必须创建命名空间
脚本中只要创建了命名空间那么所有php代码必须写在命名空间中
访问必须在全局空间(namespace)中进行访问
1.没使用命名空间有同名函数就会报错
function arr(){
}
function arr(){
}
2.使用命名空间(如果要访问时必须在全局空间(namespace)中访问)
namespace name1{
function arr(){
return 'php中文网';
}
}
namespace name2{
function arr(){
}
}
// namespace是全局(匿名)空间,访问必须这里面访问
namespace{
echo name1\arr();
}
总结
1.了解函数的创建规则
2.函数需要返回多值时应该如何操作
3.对于回调函数还需了解和其使用的场景
4.对于函数的参数了解和熟悉