初识 PHP 函数
函数的四种类型
- 自定义函数
// 求两个数的余数
function remainder(float $x, float $y) : string // 这里使用 flaot, int 都会报错
{
return "$x % $y = " . ($x % $y);
}
var_dump(remainder(7,4)); // string(9) "7 % 4 = 3"
- 系统函数
// mb_strlen(): 是系统函数,不需要定义可以直接使用,用来获取字符串的长度
// 多字节、空格和英文被统计为 1
$str = '中国 china';
var_dump(mb_strlen($str)); //int(8)
- 可变函数
初步的理解是函数名和方法名可以使用变量来定义,PHP 将寻找与变量名同名的函数,并尝试执行。
function func() {
echo "\$var = 'func',所以 ";
echo '$var() 等同于 func()';
}
$var = 'func';
$var(); // 可以正常调用 func() 函数
- 匿名函数
可以把一个没有名称的函数赋值给一个变量
$hello = function ($name) {
return "Hello $name ";
};
echo $hello('world'); // Hello world
echo $hello('php'); // Hello php
函数多值返回的四种形式
函数返回值的原则是单值返回,想要返回多值可以借助以下四种方法:
- 字符串拼接
- 把返回值赋值为数组
- JSON 字符串
序列化 字符串
字符串拼接方式
function demo1($surname, $name) {
return '姓:' . $surname . ',名:' . $name;
}
echo demo1('李', '小龙'); // 姓:李,名:小龙
把返回值赋值为数组
function demo2($surname, $name) : array
{
return ['姓氏'=>$surname, '名字'=>$name];
}
printf('<pre>%s</pre>', print_r(demo2('李', '四'), true));
运行结果:
Array
(
[姓氏] => 李
[名字] => 四
)
返回值 JSON
function demo3($surname, $name) : string
{
return json_encode(['姓氏'=>$surname, '名字'=>$name]);
}
$date = json_decode(demo3('李', '小龙'));
printf('<pre>%s</pre>', print_r($date, true));
运行结果:
stdClass Object
(
[姓氏] => 李
[名字] => 小龙
)
- 通过 serialize 函数返回多个值
function demo4($surname, $name) : string
{
return serialize(['姓氏'=>$surname, '名字'=>$name]);
}
$date = unserialize(demo4('张', '三'));
printf('<pre>%s</pre>', print_r($date, true));
运行结果:
Array
(
[姓氏] => 张
[名字] => 三
)
函数的四种参数
- 值参数:$job, 职业
- 引用参数: &$name, 姓名
- 默认参数: $sex, 性别
function person($job, &$name, $sex = '男')
{
return ['职业'=>$job, '姓名'=>$name='李四', '性别'=>$sex];
}
$name = '张三';
$arr = person('律师', $name);
printf('<pre>%s</pre>', print_r($arr, true));
echo $name;
打印结果
Array
(
[职业] => 律师
[姓名] => 李四
[性别] => 男
)
李四
- 剩余参数简化
符号为三个点号 “ … ”,放在形参中,表示 收集 ,用在实参中表示 展开
function test(...$args)
{
// 计算不定参数的乘积
return array_product($args); // int(120)
// 计算不定参数的和
// return array_sum($args); //int(15)
}
$arr = [1,2,3,4,5];
// 如果这里没有 ... 符号,会只计算第一个参数的值
// 加上 ... 后,会展开 $arr 中的所有参数,并计算乘积或和
var_dump(test(...$arr));