php自定义函数必须以function关键字开头,后跟合法函数名、英文括号和花括号;函数名不能数字开头、含空格或运算符;参数默认传值,需修改原变量时才用&传引用;return后代码不执行。

PHP 自定义函数怎么写才不会报 Parse error: syntax error
函数定义必须以 function 关键字开头,后面紧跟函数名、括号和花括号,缺一不可。漏掉括号或花括号、在函数名后加了分号、用了中文标点——这三类错误占新手报错的 80% 以上。
-
function myFunc() { }是合法的;function myFunc(); { }或function myFunc(){ }(中文括号)会直接导致解析失败 - 函数名不能以数字开头,不能含空格或运算符,但支持下划线和大小写字母:
get_user_data可以,2ndTry或get-user-data不行 - 函数体里即使只有一行语句,也必须用花括号包裹,PHP 不允许省略(不像 Python 的缩进或 JS 的单行隐式返回)
参数传值 vs 传引用:什么时候该加 &
PHP 默认按值传递参数,函数内修改变量不影响外部原始值。只有当你明确需要在函数里修改并让调用方看到变化时,才加 & 声明引用传参——但别滥用,它会让逻辑变难追踪,还可能破坏函数纯度。
- 传值示例:
function addOne($x) { $x++; return $x; },调用$a = 5; addOne($a);后$a还是 5 - 传引用示例:
function increment(&$x) { $x++; },调用后$a真的变成 6 - 注意:不能对字面量或表达式传引用,
increment(5)或increment($a + 1)会报Fatal error: Only variables can be passed by reference
return 之后的代码还会执行吗?
不会。return 是立即退出函数的指令,后面的语句完全不执行,哪怕只是个 echo 或变量赋值。这点常被误用于“兜底逻辑”,结果造成静默失效。
- 错误写法:
function checkAge($age) { if ($age ——<code>echo永远不会触发 - 正确做法:把所有分支逻辑显式写出,或用提前返回风格(guard clause),但得确保每个路径都有明确出口
- 特别注意:
return后如果跟了表达式,整个函数就返回那个值;什么都不跟(return;)则返回NULL,不是void
函数名冲突和作用域:为什么 Cannot redeclare myFunc()
PHP 不允许重复定义同名函数,无论是否在不同文件里——只要运行时两个 function myFunc() 都被加载进来,就会报这个致命错误。这不是语法问题,而是运行期约束。
立即学习“PHP免费学习笔记(深入)”;
- 常见场景:多次
include或require同一个函数文件;框架和插件各自定义了format_date()这类通用名 - 解决办法:用
function_exists('myFunc')包一层再定义;更稳妥的是改用命名空间(PHP 5.3+),比如namespace MyApp; function myFunc() { } - 注意:
require_once只防文件重复载入,不防函数重定义——如果两个不同文件都定义了同名函数,它照样崩
global,这些操作看起来灵活,实际调试成本高、测试困难、IDE 支持差。老手通常宁可多写几行,也要让函数边界清晰、输入输出确定。











