PHP自定义函数必须用function关键字声明,否则报解析错误;函数名不能数字开头或与内置函数同名;默认参数须在末尾且null不触发回退;无return则返回null;跨文件调用需显式require/include。

PHP 自定义函数必须用 function 关键字声明,缺它直接报解析错误;函数名不能数字开头、不能和 echo strlen 等内置函数同名,否则可能静默覆盖或运行异常。
function 关键字写错或遗漏会怎样
PHP 解析器只认 function 这个拼写,大小写混用(如 Function)、缩写(如 func)或漏掉,都会触发 Parse error: syntax error, unexpected ...。这不是运行时错误,代码根本跑不起来。
- 写成
myFunc() { }—— 缺function,报错 - 写成
def hello() { }—— 语法非法,解析失败 - 函数体里嵌套定义另一个函数(比如在
if块里写function inner() { }),必须确保执行流真走到那一步才定义,否则调用时提示“未定义函数”
参数默认值必须放末尾,且 null 不触发回退
PHP 的默认参数只在「该位置完全没传参」时生效。传了 null,哪怕形参写着 $name = "guest",$name 也会是 null,不是默认值。
- 正确顺序:
function greet($msg, $prefix = "Hi", $suffix = "!") { } - 错误写法:
function foo($a = 1, $b) { }—— 语法错误,带默认值的参数必须在最后 -
greet("test", null)得到的是"Hi" → null拼接结果,不是回退到默认值 - 想实现“null 也走默认”,得手动判断:
$prefix = $prefix ?? "Hi"或is_null($prefix) && $prefix = "Hi"
return 不是可选装饰,而是控制返回值的关键开关
没 return,函数执行完自动返回 null。这在只做日志、输出、改全局变量时没问题;但一旦你想把结果赋给变量、参与运算、传给其他函数,就必须显式 return。
立即学习“PHP免费学习笔记(深入)”;
-
function logMsg($m) { error_log($m); }→$x = logMsg("ok")后$x是null -
function add($a, $b) { return $a + $b; }→$sum = add(2, 3)才能得到5 -
return后面的代码永不执行,多个return(比如if/else分支里)合法,但只生效第一个遇到的
跨文件调用必须 include/require,没有自动加载
PHP 没有模块作用域概念,不像 Node.js 的 require() 或 Python 的 import 那样能自动识别并载入。你写的 myUtil() 在 utils.php 里,主脚本里直接调用就会报 Call to undefined function。
- 必须显式引入:
require 'utils.php';或include_once 'helpers.php'; -
include和require区别在于出错时是否中止:找不到文件时require报致命错误,include只警告继续执行 - 别依赖“当前目录自动包含”——路径写错、
getcwd()变化、CLI 与 Web 环境差异都可能导致引入失败
最常被忽略的是默认参数和 null 的关系,以及跨文件时忘记 require。这两个点不报语法错,但一上线就出逻辑 bug 或 500 错误,查起来反而更费时间。



















