1. 函数的声明与调用
关键字 : function
语法 function 函数名(参数列表):返回类型{函数体}
函数名:只允许字母数字或下划线组成,且不能用数字开头
function isOdd(int $num):bool{
if ($num % 2 == 0):
return false;
else :
return true;
endif;
}
echo '<br>';
echo isOdd(5) ? '是奇数' : '是偶数';
2. 函数的类型
- 自定义函数
function isEven(int $num):bool{
if ($num % 2 == 0):
return true;
else :
return false;
endif;
}
echo '<br>';
echo isEven(5) ? '是偶数' : '是奇数';
- 系统函数
//判断变量是不是整数类型
$a = '12';
echo is_int($a): '是整数类型':'不是整数类型';
- 可变函数
function isEven(int $num){
if($num % 2 == 1):
echo '奇数';
else:
echo '偶数';
endif;
}
isEven(8);
$middle = "isEven";
echo '<br>';
$middle(9);
- 匿名函数
$sum = function(int $a,int $b){
echo '<br>',"$a + $b =" .($a+$b);
};
$sum(11,34);
- 用匿名函数可以访问全局变量
$per = 0.5;
$result = function (float $money, int $num) use ($per) : float
{
$total = $money * $num;
return ($total > 20000) ? ($total* $per) : $total;
};
echo '<hr>','实付金额 = ' . $result(20000, 4), '<hr>';
//用匿名函数做闭包,可以保证变量安全性
$a = function(){
$c = 1;
$d = function(int $i, int $j) use ($c) :int{
return ($i + $j);
};
return $d;
};
echo '<hr>'.$a()(2,4),'<hr>';
3. 函数的返回值
- 通过字符串拼接
function demo1():string{
$status = 200;
$message = '返回成功';
return $status.':'.$message;
}
echo demo1();
- 通过数组返回
function demo2():array{
$status = 200;
$message = '返回成功';
return ['status'=>$status,'msg'=>$message];
}
echo demo2()['status'] === 200 ? demo2()['msg'] : '未获取到数据','<hr>';
- 通过json返回,json:是js对象字面量的字符串表示
function demo3():string{
$status = 200;
$message = '返回成功';
return json_encode(['status'=>$status,'msg'=>$message]);
}
echo demo3(),'<hr>';
- 序列化方式
function demo4():string{
$status = 200;
$message = '返回成功';
return serialize(['status'=>$status,'msg'=>$message]);
}
echo demo4(),'<hr>';
//返回
//a:2:{s:6:"status";i:200;s:3:"msg";s:12:"返回成功";}
// 反序列化: 还原
print_r(unserialize(demo4())['msg']);
4. 函数的参数
- 值参数,这是默认
function demo1(int $num){
return $num += 3;
}
echo demo1(11),'<hr>';
- 引用参数,要在参数前添加取地址符&
function demo6(int &$num){
$num = 13;
}
$num = 18;
echo '初始值:',$num,'<hr>'; // 初始值:18
demo6($num);
echo $num,'<hr>';//13
- 参数设置默认值
注意: 凡是有默认值的参数,必须写到没有默认值参数的后面
function demo7(int $age,string $sex = '男'){
return '年龄:'.$age .'<br>性别:'.$sex.'<br>';
}
echo demo7(13);
- 参数不固定
function demo8(...$args){
return max($args);
}
$arr = [34,21,12,112,99];
//数组变成多个值传入函数 可以用...$arr
$max = demo8(...$arr);
print_r($max );
5. 函数的命名空间
namespace space1{
function demo1(){
return "这是space1";
}
}
namespace space2{
function demo1(){
return "这是space2";
}
}
namespace {
echo space1\demo1();
}