return 是 PHP 函数返回结果的唯一通道;必须用于赋值、提前退出、类型声明三种场景;应写为 return $var; 而非 return($var);;仅能返回单个值,多值需封装;生成器中 return 须在所有 yield 后且仅一次。

PHP 的 return 不是“要不要用”的问题,而是“不用就拿不到结果”的硬性通道——函数内部算出的值,不靠 return 交出去,调用它的代码就收不到任何有效数据。
return 必须出现的三种典型场景
不是所有函数都必须写 return,但以下情况漏掉它,逻辑就断了:
- 你需要把计算结果赋给变量,比如
$total = calculate($a, $b);—— 没return,$total就是null - 你在做条件判断并希望提前退出,比如参数非法时直接
return false;,后面校验和处理逻辑就不该再跑 - 你写了类型声明(如
function sum(int $a): int),PHP 7+ 会强制检查返回值类型;没return或类型不符,运行时抛TypeError
return 后面加不加括号?怎么写才不踩坑
return 是语言结构,不是函数,括号只在需要明确表达式优先级时才加。日常写法建议统一:
- 返回变量:直接写
return $result;,别写return($result);—— 后者容易被误读为函数调用,且 PHP 解析负担略高 - 返回表达式:比如
return $a + $b * 2;,加括号反而多余;只有嵌套复杂时才考虑return ($x > 0 ? $x : 0) + $y; - 空返回或提前终止:写
return;即可,等价于return null;,别写return null;多此一举
想返回多个值?别幻想 return 多个,用数组或对象封装
PHP 的 return 只能返回一个值,所谓“返回多个”,本质是把多个东西打包成一个复合类型:
立即学习“PHP免费学习笔记(深入)”;
- 返回索引数组:
return [$sum, $count];,调用后用list($s, $c) = myFunc();或$res[0]取值 - 返回关联数组:
return ['status' => 'ok', 'data' => $rows];,语义清晰,适合 API 响应 - 返回对象实例:
return new Result($sum, $avg);,适合需方法扩展或类型约束的场景 - 注意:别试图用逗号分隔多个值,
return $a, $b;是语法错误
生成器里 return 和 yield 完全不是一回事
PHP 7.0+ 允许在生成器函数中用 return,但它和 yield 职责分离,混用会出错:
-
yield是“边产边交”,每次迭代返回一个值,函数状态保持 -
return是“最后交底”,只允许出现一次,且必须在所有yield之后,用于传递最终状态,比如return "done"; - 要拿到这个最终值,得遍历完生成器后调用
$gen->getReturn();没遍历完就调,会报错 - 常见错误:在
yield循环中间插return,导致后续yield永远不执行,还拿不到getReturn()结果
最容易被忽略的一点:return 的位置决定函数是否真的“执行到那里”。哪怕逻辑上该走某条分支,如果前面有未被满足的条件跳过了 return,函数就静默返回 null —— 这类缺失的 return 在深层 if/else 或异常路径中极难排查。



















