最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
什么是PHP的返回值类型声明规范
时间:2026-07-14 09:30:57 编辑:袖梨 来源:一聚教程网
PHP返回值类型声明需在函数括号后用冒号标注小写基础类型(如int、string),配合declare(strict_types=1)启用严格校验;?Type表示可空,void表示无返回值;PHP8+支持联合类型和完整命名空间类名。
PHP 返回值类型声明的核心规范是:在函数参数列表右括号后、函数体前,用冒号加类型名明确标注返回值类型;必须配合 declare(strict_types=1); 才能真正启用运行时类型校验,否则仅作提示用途。
基础类型必须用小写短名
PHP 仅接受标准小写形式作为合法标量类型声明:int、string、bool、float、array、void。写成 integer 或 Boolean 虽不报语法错,但会被解析器统一转为小写,IDE 和错误信息中也只显示小写名,容易引发误解。
-
function getId(): int { return 42; }✅ 合法 -
function getName(): String { return 'abc'; }❌ 非法(String 不是有效类型) -
function getConfig(): array { return ['host' => 'localhost']; }✅ 唯一支持的数组声明方式,不能写[]或Array
可空类型与 void 的语义不可混淆
?Type 表示“该类型或 null”,是 PHP 7.1+ 引入的语法糖,等价于 Type|null;而 void 是完全不同的概念——它表示函数不返回任何可用值,调用后若尝试接收返回值(如 $res = saveLog('msg');),PHP 会直接抛出 Fatal error。
-
function findUser(int $id): ?User { return $id === 1 ? new User() : null; }✅ 允许返回对象或 null -
function log(string $msg): void { error_log($msg); }✅ 正确使用 void -
function log(string $msg): void { return 'done'; }❌ 致命错误:void 函数不得返回值 -
function delete(int $id): void { return $id > 0; }❌ 错误语义:应返回 bool 表示是否成功,而非掩盖结果
strict_types=1 只对当前文件生效
启用严格模式后,PHP 对当前文件中定义的所有函数的参数和返回值执行精确类型匹配,不兼容值直接抛 TypeError。但它不会跨文件传播——即使你在 A.php 中启用了 strict,再 require 'B.php'(B.php 未声明 strict),B.php 中定义的函数仍按弱模式运行。
立即学习“PHP免费学习笔记(深入)”;
- 没开 strict:
function foo(): int { return "123"; }→ 静默转为整数 123 - 开了 strict:
function foo(): int { return "123"; }→ 立即抛错:Return value must be of type int, string returned - PHP 8+ 特别注意:若某分支遗漏
return,末尾隐式返回null,也会触发 TypeError;PHP 7.x 则静默转为 0,极易埋下逻辑漏洞
联合类型与自定义类型需版本对齐
PHP 8.0+ 支持用竖线 | 声明联合类型,如 int|string|float;类名需使用完整命名空间(如 DateTime);iterable、callable、object 等复合类型也受支持。相对类类型(self、parent、static)仅限类方法中使用。
-
function formatId(mixed $id): int|string { return is_numeric($id) ? (int)$id : (string)$id; }✅ PHP 8.0+ -
function now(): DateTime { return new DateTime(); }✅ 完整命名空间 -
class User { public function clone(): static { return new static(); } }✅ static 仅用于返回值 -
function handle(): resource { ... }❌resource不被允许作为返回类型声明
相关文章
- 以下哪种职业的执业人员具有审计签字权 蚂蚁新村今日答案2026.1.14 07-14
- 蚂蚁新村今日答案1.14 07-14
- 蚂蚁新村2026年1月14日答案最新 07-14
- 蚂蚁庄园小鸡答题今日答案2026年1月15日 07-14
- 蚂蚁庄园今日最新答案1.15 07-14
- 蚂蚁庄园今日答案最新2026.1.15 07-14