为什么要用函数
写代码时你会发现有些逻辑反复出现:校验邮箱、拼格式化字符串、算运费。把这段逻辑包进函数,起个好名字,以后一行调用就完事;需求变了也只需要改一处,而不是满文件找重复代码。
定义与调用
PHP 用 function 关键字定义函数:
<?php
function greet($name) {
return "你好," . $name . "!";
}
echo greet("小雪"); // 输出:你好,小雪!
echo greet("阿梨"); // 输出:你好,阿梨!
PHP 里函数在定义之前也能调用(同一文件内),但为了可读性,还是建议先定义、后使用。
参数与默认值
参数可以带默认值,调用时不传就用默认值:
<?php
function makeCoffee($type = "拿铁", $sugar = 1) {
return "一杯{$type},加 {$sugar} 块糖";
}
echo makeCoffee(); // 输出:一杯拿铁,加 1 块糖
echo makeCoffee("美式"); // 输出:一杯美式,加 1 块糖
echo makeCoffee("美式", 0); // 输出:一杯美式,加 0 块糖
PHP 8.0 起还支持按参数名传值,顺序就不用记了:
<?php
echo makeCoffee(sugar: 2, type: "摩卡"); // 输出:一杯摩卡,加 2 块糖
返回值
return 把结果交还给调用方,函数执行到 return 就结束。需要带回多个结果时,可以返回数组再解构:
<?php
function divmod($a, $b) {
return [intdiv($a, $b), $a % $b];
}
[$quotient, $remainder] = divmod(17, 5);
echo $quotient; // 输出:3
echo $remainder; // 输出:2
没有 return 语句的函数返回 null,这类函数适合表示"只做事、不回话"。
变量作用域
函数内部默认看不到外部的变量,这是新手最容易踩的坑:
<?php
$count = 10;
function show() {
// echo $count; // 报错:$count 在函数内未定义
$count = 99; // 这是函数自己的局部变量
echo $count; // 输出:99
}
show();
echo $count; // 输出:10,外部的 $count 没被动过
确实要用外部数据时,把它当参数传进来是最清晰的做法;global 关键字能用,但会让代码变难懂,不推荐。
可变数量的参数
参数个数不确定时,用 ... 把它们收进数组:
<?php
function sum(...$nums) {
$total = 0;
foreach ($nums as $n) {
$total += $n;
}
return $total;
}
echo sum(1, 2, 3); // 输出:6
echo sum(10, 20, 30, 40); // 输出:100
小结
这篇讲了 PHP 函数的几块基本功:function 定义与 return 返回值、默认参数与命名参数、函数内外的变量作用域,以及 ... 可变参数。写的时候记住两条:能用参数传的就别用 global;一个函数尽量只做一件事,事情多了就再拆一层。

