php自定义函数需注意:函数名合法、括号花括号不遗漏、不可在条件/循环内直接定义;参数默认值须为常量;必须用return返回预期类型值;传引用需加&且仅支持变量;include/require路径以调用脚本为准;类型声明需匹配严格模式要求。

PHP自定义函数怎么写才不会报错
直接写 function 就行,但很多人卡在语法细节上——比如忘了括号、漏了花括号、或者把函数体写在 if 里却没注意作用域。PHP 不允许在条件语句或循环体内直接定义函数(除非用 function_exists() 做兜底),否则会触发 Parse error: syntax error。
- 函数名必须以字母或下划线开头,后面可跟字母、数字、下划线;
my_func可以,2func不行 - 参数列表里的默认值必须是常量或字面量,不能是变量或函数调用,比如
$a = date('Y')会报错 - 如果函数要返回数组或对象,别漏掉
return,空函数体默认返回NULL,后续用is_array()判断会失败
PHP函数参数传值 vs 传引用的区别在哪
默认所有参数都是传值,改形参不影响实参;加 & 才是传引用。这个区别不只影响逻辑,还决定你能不能在函数里修改原始变量。
- 传引用写法:
function modify(&$arr) { $arr[] = 'new'; },调用后原数组真变了 - 对象在 PHP 7+ 默认按“引用语义”传递(实际是写时复制),所以改对象属性不用加
&,但重新赋值($obj = new StdClass)不会影响外部变量 - 传引用的参数不能传字面量,比如
modify([1,2])会报Only variables can be passed by reference
为什么函数里用 include 或 require 有时找不到文件
因为 include 和 require 的路径解析是相对于当前执行脚本的位置,不是函数定义的位置。哪怕函数在 /lib/utils.php 里,只要是在 /public/index.php 中调用,包含路径就按后者算。
- 推荐统一用
__DIR__拼路径:include __DIR__ . '/config.php'; - 避免用相对路径如
../config.php,一旦调用链变深,路径立刻失效 -
require_once和include_once在函数内多次调用也不会重复加载,但要注意:它们的“已加载”状态是全局的,不是按函数作用域隔离的
PHP函数返回值类型声明容易踩的坑
加了返回类型(比如 : string)后,PHP 会强制检查,但很多人忽略隐式转换和 void 的边界行为。
立即学习“PHP免费学习笔记(深入)”;
- 返回
null给声明为: string的函数,会抛TypeError,连echo都没机会执行 -
: void表示“不返回任何值”,但写return;合法,写return null;就非法 - 开启严格模式(
declare(strict_types=1);)后,类型检查更硬,整数传给: float参数也会报错,不只是返回值
$fn = 'my_' . $type; $fn();)、或者依赖未声明的超全局变量($_POST),这些地方最容易在迁移或调试时突然崩掉。写之前先想清楚它会在哪被调,谁负责初始化依赖。











