一.函数的声明与调用
1.函数声明语法
<?php
/*
function 函数名称的标识符(参数) {
由代码语句组成,也可以为空的函数体
}
*/
2.函数名命名规则:只允许字母数字或下划线且不允许用数字开头function usename(){}
3.函数示例声明调用,输出:
<?php
//函数声明
function usename($name):string //其中string是标识返回类型
{
return "用户名称是:".$name;
}
// 函数调用
echo usename("admin");
二.函数类型
1.自定义类型 :开发者自己定义的函数
<?php
//自定义函数
function wages(int $n,float $money):float
{
return $n * $money;
}
echo "本月工资=".wages(20,100);
2.系统函数:可直接使用
<?php
//系统函数
$num = 5;
$arr = [5,6,7,9,1];
//判断一个变量值是否在一个数组中,是则返回bool(true),反之测返回bool(false)
var_dump(in_array($num, $arr));
3.可变函数
<?php
function wages2(int $n,float $money):float
{
return $n * $money;
}
$funname = "wages2";
echo "本月工资=".$funname(15,100);
//输出 本月工资=1500
4.匿名函数(在php中也称为”闭包”: 可以访问父作用域中的变量)
- 常规匿名函数
<?php
$getwage =function(int $n,float $money):float
{
return $n * $money;
};
//输出 本月工资=750
echo "本月工资=" . $getwage(15,50);
- 当前父作用域是全局变量
<?php
//当前父作用域是全局变量
$dis = 250;//个税
$getw = function(int $n,float $money) use($dis):float
{
$tap = $n * $money;
return $tap>5000 ? ($tap-$dis) : $tap;
};
//输出 本月工资=5750
echo "本月工资=" . $getw(30,200);
- 父作用域是父函数
<?php
$f = function($distion){
$g = function(int $n,float $money) use($distion):float
{
$tap = $n * $money;
return $tap>500 ? ($tap-$distion) : $tap;
};
//将子函数以返回值的方式返回给调用者
return $g;
};
//输出 本月工资=5700
echo "本月工资=" . $f(300)(30,200);
三.函数的返回值
1.函数必须要有返回值,且函数只能返回单一的值;
2.函数的多值返回方法
- 字符串返回
<?php
// 通过字符串拼装
function index1():string
{
$status = 1;
$msg = "登录成功!";
return $status.$msg;
}
//输出 1登录成功!
echo index1();
- 数组返回
<?php
// 数组返回
function index2():array
{
$array = [1,"编辑成功!"];
return $array;
}
//输出 1===编辑成功!
echo index2()[0]."===".index2()[1];
- json格式返回
<?php
//json返回
function index3():string
{
$array = ["status"=>1,"msg"=>"编辑成功!"];
//json_encode():对象/数组 转 json, 成功返回 json 编码的 string ,失败返回 false
return json_encode($array);
}
//json_decode(): son 转 对象/数组 , 当第二个参数为true返回 array ,默认是false返回object。
$data = json_decode(index3(),true);
//输出 array(2) { ["status"]=> int(1) ["msg"]=> string(15) "编辑成功!" }
var_dump($data);
- 序列化方式返回
<?php
// 序列化方式返回
function index4():string
{
$array = ["status"=>1,"msg"=>"编辑成功!"];
//serialize():对象/数组 转 序列号格式
return serialize($array);
}
//unserialize(): 反序列化(还原)
//输出 array(2) { ["status"]=> int(1) ["msg"]=> string(15) "编辑成功!" }
var_dump(unserialize(index4()));
四.函数的参数
1.值参数,也是默认
<?php
//值参数
function param(int $data):int
{
return $data +=10;
}
//输出 10
echo param(10);
2.引用参数:在参数前添加取地址符&
<?php
function param1(int &$data):int
{
// 函数内部对参数的更新会实时映射到外部实际参数
return $data +=10;
}
$val =100;
//输出 110
echo param1($val),"<br>";
//输出 110 $val值会随param1()函数返回值变化而变化,相当于取$data
echo $val;
3.默认参数
<?php
//默认参数:凡是有默认值的参数,必须写到没有默认值参数的后面
function param2(float $money,string $name="admin" ):string
{
return "这几天".$name."收获".$money."元";
}
echo param2(120); //$name为默认参数,即没传参数则使用“admin”
//输出 这几天admin收获120元
4.剩余参数
<?php
//调用的参数不固定
function param_sum(...$day):string
{
$str = "";
for($i=0;$i<count($day);$i++){
$str .= $day[$i].";";
}
return $str;
}
$arr =["星期一","星期二","星期三","星期四"];
echo param_sum(...$arr);
//输出 星期一;星期二;星期三;星期四;
五.函数的命名空间
<?php
namespace ns1 {
function index($name)
{
return "ns1中的index的" . $name;
}
}
namespace ns2 {
function index($username)
{
$res = \ns1\index($username);
return "ns2中的index的调用".$res;
}
}
// 全局空间: 匿名空间,默认空间
namespace {
echo ns2\index("admin");
// 输出 ns2中的index的调用ns1中的index的admin
}
总结
对回调函数,异步的流程使用不太清楚