PHP自定义函数以function关键字开头,支持默认值、引用传参和可变参数,需注意参数顺序与作用域限制;无return时默认返回null,函数名全局唯一且区分大小写。

PHP 自定义函数的基本语法结构
PHP 定义函数必须用 function 关键字开头,函数名后紧跟括号和花括号。没有返回值声明、无类型约束时,函数默认返回 null。
最简合法函数写法:
function say_hello() {
echo "Hello";
}
注意:function 是关键字,不能写成 Function 或 FUNCTION;函数名区分大小写,但调用时不敏感(推荐全小写加下划线风格)。
参数传递的三种常见方式与陷阱
PHP 函数参数支持默认值、引用传参、可变参数,但容易混淆的是「默认值必须放在非默认参数之后」,否则会报 ParseError: default argument follows non-default argument。
立即学习“PHP免费学习笔记(深入)”;
-
$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 是合法的,但只有第一个生效;没有 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($amount, 2);
}
}
函数名冲突比想象中更隐蔽——比如两个第三方库都定义了 str_slug(),而你又没用命名空间,运行时才爆错。











