PHP 7.0起支持函数返回值类型声明,语法为参数列表后加冒号和类型名;支持int、string、bool、array、void等基础类型及PHP 7.1+的?Type、PHP 8.0+的mixed;strict_types不影响返回值检查,但运行时强制类型匹配。

PHP 7.0 开始支持函数返回值类型声明,语法简单直接:在函数定义的参数列表后、函数体前,用冒号(:)加上类型名即可。
基础写法与示例
返回类型声明必须紧接在参数括号之后,不能省略,也不能放在函数名前。常见类型包括 int、string、bool、array、void 等。
- function get_count(): int { return 42; }
- function format_name(string $name): string { return ucfirst($name); }
- function is_active(): bool { return true; }
- function list_users(): array { return ['alice', 'bob']; }
- function log_message(string $msg): void { echo $msg . PHP_EOL; }
可空类型与混合类型
PHP 7.1+ 支持可空返回类型(需加 ? 前缀),PHP 8.0+ 支持 mixed 类型:
- function find_user(int $id): ?User { return $id === 1 ? new User() : null; }
- function get_config(): mixed { return $_ENV['DEBUG'] ?? 'default'; }
注意:mixed 不触发运行时检查,主要用于静态分析工具提示;而 ?Type 在严格模式下会校验是否为指定类型或 null。
立即学习“PHP免费学习笔记(深入)”;
strict_types 对返回值的影响
返回值类型检查发生在函数执行结束时,与 declare(strict_types=1) 无关——它只控制参数类型校验行为。但返回值仍受运行时强制约束:
- 若声明为 : int,却返回 "123"(字符串),会抛出 TypeError
- 若声明为 : void,函数体内不能出现 return 表达式(如
return "done";),否则报错 - 隐式返回 null(即无 return 语句)在 : void 下合法,在其他类型下不合法
匿名函数也适用
匿名函数同样支持返回类型声明,写法一致:
- $mapper = function(array $items): array { return array_map('strtoupper', $items); };
- $checker = fn(string $s): bool => strlen($s) > 0;
箭头函数(fn)仅支持单表达式,但类型声明规则与传统匿名函数完全相同。



















