PHP自定义函数以function关键字开头,支持默认值、引用传参和可变参数,需注意参数顺序与作用域限制;无return时默认返回null,函数名全局唯一且区分大小写。
PHP 定义函数必须用 function 关键字开头,函数名后紧跟括号和花括号。没有返回值声明、无类型约束时,函数默认返回 null。
最简合法函数写法:
function say_hello() {
echo "Hello";
}
注意:function 是关键字,不能写成 Function 或 FUNCTION;函数名区分大小写,但调用时不敏感(推荐全小写加下划线风格)。
PHP 函数参数支持默认值、引用传参、可变参数,但容易混淆的是「默认值必须放在非默认参数之后」,否则会报 ParseError: default argument follows non-default argument。
$name:普通值传递,函数内修改不影响外部变量&$count:加 & 表示引用传参,函数内改 $count 会同步到调用处...$items:可变参数(PHP 5.6+),接收多余实参为数组,必须放在参数列表末尾正确示例:
function log_event($level, $message, &$counter = 0, ...$context) {
echo "[{$level}] {$message}\n";
$counter++;
if (!empty($context)) {
print_r($context);
}
}
return 不仅用于返回值,还立即终止函数执行。多次 return 是合法的,但只有第一个生效;没有 return 的函数隐式返回 null。
常见误区:
return true; 后还跟代码,后面不会执行return,可能漏掉后续逻辑return $obj; 配合 clone 或引用赋值例如:
function find_user($id) {
if (empty($id)) {
return false; // 提前退出,不查库
}
return ['id' => $id, 'name' => 'admin'];
}
PHP 函数是全局作用域的,不能嵌套定义(除非在函数内用 create_function 或匿名函数)。同名函数一旦被 include 多次,会触发 Fatal error: Cannot redeclare xxx()。
规避方式:
function_exists('my_func') 包裹定义,防止重复加载安全写法:
if (!function_exists('format_price')) {
function format_price($amount) {
return number_format($a
mount, 2);
}
}
函数名冲突比想象中更隐蔽——比如两个第三方库都定义了 str_slug(),而你又没用命名空间,运行时才爆错。