一、 函数的声明与调用
1. 自定义函数
2. 系统函数
3. 可变函数
$funcName = 'getPrice';
echo '实付金额= ' . $funcName(2000, 0.8), '<hr>';
4. 匿名函数
1. 通过字符串string拼装
function demo1(): string
{
$status = 1;
$message = '成功';
return $status . ',' . $message;
}
echo demo1();
2. 通过数组array方式返回
function demo3(): array
{
$status = 1;
$message = '成功';
return ['status' => $status, 'msg' => $message];
}
echo demo3();
3. json返回,用json_encode,是JS对象字面量的字符串
function demo5(): string
{
$status = 1;
$message = '成功';
return json_encode(['status' => $status, 'msg' => $message]);
}
echo demo5();
4. 序列化方式serialize
function demo6(): string
{
$status = 1;
$message = '成功';
return serialize(['status' => $status, 'msg' => $message]);
}
echo demo6();
1. 值参数,为默认
function demo1(float $arg): float
{
return $arg *= 2;
}
echo demo1(80);
2. 引用参数,要在参数前添加取地址符&
function demo2(float &$arg): float
{
return $arg *= 2;
}
$val = 80;
echo $val;
3. 默认参数
- 有默认值的参数必须写到没有默认值参数的后面,可以给a,b赋值
function demo3(float $a, float $b, string $opt = '+')
{
$res = 0;
switch ($opt) {
case '+':
$res = "$a + $b = " . ($a + $b);
break;
case '-':
$res = "$a - $b = " . ($a - $b);
break;
case '*':
$res = "$a * $b = " . ($a * $b);
break;
case '/':
$res = "$a / $b = " . ($a / $b);
break;
default:
$res = '非法操作符';
}
return $res;
}
echo demo3(5, 10), '<br>';
echo demo3(8, 9, '*'), '<br>';
echo demo3(8, 9, '@'), '<br>';
4. 剩余参数
function demo4($a, $b, $c)
{
return $a + $b + $c;
}
echo demo4(1, 2, 3);
- 收集:调用参数的数量不固定,如何求和?array_sum
function demo5(...$args)
{
return array_sum($args);
}
$res = demo5(1, 2, 3, 4, 5, 6);
print_r($res);
- 展开:将剩余参数用在函数的调用表达式中
function demo6(...$args)
{
return array_sum($args);
}
$arr = [1, 2, 3, 4, 5, 6, 7, 8];
$res = demo6(...$arr);
print_r($res);
- 异步编程中函数的参数【回调函数】
$data = range(1, 100);
$arr = array_map(function ($item) {
if ($item % 2 === 0)
return $item;
}, $data);
print_r($arr);
- 过滤空值
$data = range(1, 100);
$arr = array_map(function ($item) {
if ($item % 2 === 0)
return $item;
}, $data);
$res = array_filter($arr, function ($item) {
return $item;
});
- 件名重排array_values
print_r(array_values($res));
五、函数的命名空间
- 不能重复命名,要取不同名
- 全局空间,也叫默认空间,同名函数在不同目录下是可以的
namespace ns1 {
function demo1()
{
return __FUNCTION__;
}
}
namespace {
function demo1()
{
}
echo ns1\demo1();
}