PHP 7.2+ 中 object 是内置类型提示而非函数,用于参数和返回值声明,支持可空写法 ?object,无需 strict_types 即严格拒绝标量/数组/null(除显式 ?object 外),但不支持属性声明或实例化。

PHP 7.2+ 中的 object 是内置类型提示,不是函数,不能“调用”或“内置函数化”,但可以像其他类型(如 int、string)一样直接用于参数和返回值声明。
对象类型声明的基本语法
只需在函数参数或返回值位置写 object,表示该位置必须传入或返回一个对象实例(任何类的实例,包括 stdClass、自定义类、接口实现类等):
-
参数声明:
function doSomething(object $item): void { ... } -
返回值声明:
function createObject(): object { return new DateTime(); } -
可空对象(PHP 7.1+):
function handle(?object $input): void { ... }
必须配合 strict_types=1 才能真正严格校验
仅写 object 类型提示,不加 declare(strict_types=1);,PHP 仍处于松散模式——但注意:object 类型本身在 PHP 7.2+ 中默认就拒绝标量、数组、null(除非显式声明为 ?object),这点与标量类型不同。也就是说:
- 即使没开 strict_types,
function f(object $x) {}调用f("abc")或f([])也会报TypeError - 但
f(null)会失败(除非写成?object) - strict_types=1 主要强化的是
int/string等标量类型的检查,对object的约束已是硬性
支持的使用场景
object 类型提示可用于:
立即学习“PHP免费学习笔记(深入)”;
- 普通函数参数与返回值
- 类方法、静态方法的参数与返回值
- 闭包(匿名函数)的参数类型
- 与命名空间、接口、抽象类完全兼容(例如
function log(Logger $logger): object)
常见错误写法
以下写法是无效或不推荐的:
-
object()或new object()——object不是类,不能实例化 -
function f(Object $x)(首字母大写)—— 错误,PHP 中是小写object关键字 - 在类属性上使用:
public object $data;—— PHP 不支持属性类型声明(直到 PHP 7.4+ 才支持 typed properties,且object在 7.4+ 中仍不被允许用于属性)



















