Laravel 10中方法返回类型定义含异常类是否合规?
问题解答
1. 返回类型声明错误
PHP的方法返回类型仅用于标注方法正常执行完成时返回值的类型,异常不属于返回值范畴,因此不能将ItemValidAccess(异常类)写入返回类型声明中。你当前的true | ItemValidAccess写法不符合PHP语法规范,正确的返回类型应该是bool(或者PHP 8.0+支持的字面量类型true)。
2. PHPDoc注释错误
@return标签仅用于描述方法正常返回的类型,异常的声明需要使用@throws标签。你不需要在@return里写异常类,而是添加@throws ItemValidAccess来标注该方法可能抛出的异常类型。
修正后的代码示例
/** * 判断登录用户是否有权限完成该项目 * * @param \App\Models\Item $item * @throws ItemValidAccess 当用户不是项目创建者时抛出 * @return true */ public static function onlyOwnerCanCompleteItem(Item $item): true { throw_if( $item->creator_id !== Auth::user()->id, ItemValidAccess::class, __('You are not allowed to complete this item') ); return true; }
补充说明
throw_if在条件满足时会直接中断程序执行并抛出异常,不会走到后续的return语句,因此不需要在throw_if后添加额外的return,这部分代码逻辑是没问题的。
内容的提问来源于stack exchange,提问作者Petro Gromovo
相关产品推荐
相关产品推荐

