PHP函数默认返回null,必须显式return;PHP7.1+支持[$a,$b]=func()解构数组,list()仅适用于数字键;PHP8.0+的void表示禁止return表达式而非禁止return语句;返回引用需谨慎,仅适用于长期存在的变量。

PHP 函数没返回值?return 忘写了或写在了错误位置
PHP 函数默认返回 null,不写 return 就等于什么都没给调用方。常见现象是:函数里明明做了计算、拼了字符串,但调用后变量是 null 或空——八成是漏了 return,或者它被卡在某个 if 分支里,路径没走通。
-
return必须显式写出,PHP 不会自动返回最后一行表达式的值(不像 Ruby 或 JS 的箭头函数) - 检查所有分支路径,尤其是
if/else、switch,确保每条可能执行的路径都有return,或至少有一个兜底return - 提前
return是合法且常用的做法,比如参数校验失败直接return false;,不用套一层else
返回多个值只能靠数组或对象?list() 和 PHP 7.1+ 的结构化解包
PHP 原生不支持多值返回(如 Python 的 return a, b),但可以用数组“假装”返回多个值。关键是调用方怎么接——老写法容易出错,新语法更安全。
- PHP 7.1+ 推荐用
[$a, $b] = myFunction();,前提是函数返回索引数组且长度匹配,否则报Warning: Undefined array key - PHP 5.4–7.0 可用
list($a, $b) = myFunction();,但若函数返回false或非数组,会触发Notice: Array to string conversion或静默失败 - 别依赖返回关联数组后用
list()解构——list()只认数字键,['name' => 'x', 'age' => 25]这种会丢数据
函数返回 void?PHP 8.0+ 的类型声明不是摆设
PHP 8.0 加了 void 返回类型,但它只表示“不许有 return 表达式”,不是“不许写 return”。很多人配错类型后运行时报错,其实只是语法理解偏差。
- 声明
function foo(): void { return; }合法;但function foo(): void { return 123; }直接 Fatal error - 如果函数本意是“纯副作用”(比如写日志、发请求、改全局变量),用
void能让 IDE 和静态分析工具提前拦住误用,比如有人写了$x = foo(); - 已有函数返回
null却声明void,升级到 PHP 8 后会报错;反过来,声明了void却实际返回值,也会被拒绝
返回引用要加 &,但多数时候你并不需要
用 function &myFunc() { return $var; } 确实能返回变量引用,但除非真要修改原变量,否则极易引发意外行为——比如返回局部变量的引用,PHP 会静默转成拷贝,你以为改了,其实没动。
立即学习“PHP免费学习笔记(深入)”;
- 返回引用只适用于:操作一个长期存在的变量(如类属性、全局数组元素),且明确需要后续修改影响源头
- 返回函数内定义的普通变量(如
$tmp = 'abc'; return $tmp;)加&没意义,PHP 会警告Only variable references should be returned by reference - 返回数组元素引用(如
&$arr[0])可行,但要注意数组本身是否可变;返回new StdClass()这类临时对象的引用,结果不可靠
最常被忽略的是:函数返回值类型和调用方的预期是否对齐。比如函数声明返回 string,但逻辑里某条路径漏了 return,实际返回 null,而调用方直接拿去 strlen() ——这时报错不在函数里,而在下游,排查起来绕一圈。










