You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Psalm中stdClass返回对象的正确定义方式是什么?

在Psalm中返回对象的正确定义方式

错误原因

你当前使用的@psalm-return \stdClass{foo?: string}语法不符合Psalm规范,Psalm不支持直接在类名称后附加结构定义,因此抛出Unexpected brace character错误。

正确写法

根据需求不同,有两种常用的正确标注方式:

1. 严格限定为stdClass并指定属性结构

如果需要明确返回值是stdClass实例,同时包含可选的foo字符串属性,需使用交集类型结合结构语法:

/** 
 * @psalm-return \stdClass&object{foo?: string}
 */
function returnObject(): \stdClass {
 $item2 = new \stdClass();
 $item2->foo = "asd";
 return $item2;
}

2. 仅指定对象属性结构(不严格限定类)

如果不需要强制返回stdClass,只需描述对象的属性结构,直接使用object{...}语法即可:

/** 
 * @psalm-return object{foo?: string}
 */
function returnObject(): object {
 $item2 = new \stdClass();
 $item2->foo = "asd";
 return $item2;
}

说明

Psalm的object{属性名?: 类型}语法用于定义对象的结构类型,当需要同时约束对象为某个具体类时,通过&将类类型与结构类型组合成交集类型,这样Psalm既能识别对象的类实例身份,又能校验其属性结构。

内容的提问来源于stack exchange,提问作者Vixtrime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 21:27:07