PHP 8.2.1中能否使用?string|array这类可空联合类型提示?及报错解决方案咨询
PHP 8.2.1中能否使用?string|array这类可空联合类型提示?及报错解决方案咨询
嘿,这个问题我之前踩过同款坑!其实是PHP的语法规则在这儿卡了壳——?这个可空类型的简写符号,只能搭配单一类型使用,不能直接跟联合类型组合写成?string|array,这就是你触发ParseError: syntax error, unexpected token "|", expecting "{"的核心原因。
给你两个在PHP 8.2.1里完全可行的解决方案:
方案1:把
?展开为null,并入联合类型
直接把null作为联合类型的一员明确写进去,这是最直观的写法,PHP 8.0及以上版本都支持:// 两种顺序都合法,看你个人编码习惯选择 function abc(): string|array|null { // 你的业务代码逻辑 } function abc(): null|string|array { // 你的业务代码逻辑 }方案2:用类型别名简化写法(PHP 8.1+适用)
如果你的代码里频繁需要用到string|array这个类型组合,可以先定义一个类型别名,再用?标记可空,既能保持代码简洁,又符合语法要求:// 先定义复用的类型别名 type StringOrArray = string|array; // 再使用可空简写 function abc(): ?StringOrArray { // 你的业务代码逻辑 }
简单捋下逻辑:PHP的?T是T|null的语法糖,但这个语法糖只对单一类型生效。当你尝试写?string|array时,解析器会把?string当成一个整体,后面的|array就会被判定为意外的语法标记,直接抛出错误。
内容来源于stack exchange
相关产品推荐
相关产品推荐

