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
相关产品推荐
相关产品推荐

