<?php
//函数语法
function func1(int $a,int $b):float
{
return $a+$b;//显示返值
}
echo func1(1.5,1.2);
echo '<hr>';
//命名函数 定义一个有参有返函数
function bianLiang1(float $a,float $b):float{
return $a*$b;
}
echo bianLiang1(100,0.88);//调用函数,并传参
echo '<hr>';
//系统函数 系统自带函数 不用定义,拿来就能用
$str='哈尔滨防控漏洞为全国敲响新的闹钟';
$ss=mb_substr($str,0,5);//截取str字符串,从下标0开始,到5结束
//mb_是转换编码格式,把ASCLL转换为utf8(系统默认为ASCLL,utf8为中文编码)
echo $ss.'<br>';
//可变函数 把函数赋值给变量,可通过变量来调用函数
$fucnName='func1';
echo $fucnName(80,0.9).'<br>';
//匿名函数 没有名字的函数
//变量保存的函数,实质上是保存的一个对象
$bianLiang2=function ($a,$b){
echo $a.'hello world'.$b;
};
$bianLiang2(1,2);
//闭包
//函数内部有一些局部变量(要执行的代码块)在函数结束后没有被释放
function display(){
$name=__FUNCTION__;
$neibufunction=function () use ($name) {
echo $name;//内部匿名函数调用父级元素,使用use
};
$neibufunction();//调用函数
}
display();
//返回值
//单值返回
function demo1():string{
return '11';
}
//多值返回
//1字符串拼接
function demo2():string{
$a=1;
$b=2;
return $a.'+'.$b;
}
//2数组 将多个元素以键值对的方式打印出来
function demo3():array{
return ['sex'=>'男','age'=>18];
}
$r=print_r(demo3(),true);
printf('%s',$r);
// 3. 通过JSON返回
function demo4():string{
return json_encode(['sex'=>'女','age'=>20]);
//将元素以键值对的方式存储在json
}
echo demo4();
//--------------------------------------------
$var=json_decode(demo4(),true);//从json中取出数据
print_r($var);
//--------------------------------------------
//4。序列化
function demo5():string{
return serialize(['number'=>12123,'class'=>11]);
}
echo demo5();
//反序列化
$unvar=unserialize(demo5());//返回类型是序列化之前的类型
printf('%s',print_r($unvar,true));//格式化输出数据
echo '<hr>';
//函数参数
//1值参数
function demo6(int $arg):int{
return $arg*2;
}
$vv=100;
echo demo6($vv);//返回的只是计算结果,不会改变变量的值
echo '<hr>';
//引用参数
function demo7(int &$arg):int{//在参数前使用取地址符&,就会改变原始调用参数的值
return $arg*2;
}
$vv=100;
echo demo7($vv);
echo '<hr>';
echo $vv;
//默认参数,它必须写在必选参数的后面
function demo8($a,$b=1){
return $a+$b;
}
echo '默认参数';
echo demo8(2);
//收集参数
function demo9(...$item){
$to=0;
foreach($item as $value){
$to+=$value;
}
return $to;
}
echo '收集参数';
echo demo9(1,2,3,4,5);
数组解析
$user[] = [100, 'admin', 90];
$user[] = [110, 'peter', 60];
foreach ($user as list($id, $name)) {
//解析数组,分开输出打印
printf('id=%s, name=%s<br>', $id, $name);
//格式化输出
}