php 类型问题:object 必须与 adminrequest 兼容
该问题源自接口中
save
方法的
object
类型参数。然而,在其实现类中,该参数被指定为
adminrequest
类型。这种不一致导致了类型错误,提示 "object 必须与 adminrequest 兼容"。
原因:
php 中,子类参数签名允许比父类更宽泛,而返回类型签名允许比父类更具体。对象类型
object
比
adminrequest
更具体,这是一个从具体到宽泛的过程。因此,这违反了协变规则。
立即学习
“
PHP免费学习笔记(深入)
”;
解决方案:
Laravel 13.2.0
PHP中文网提供Laravel 13.2.0版本下载,Laravel框架 是基于 PHP 8.3+ 的高性能框架,官方推荐通过 Composer 安装。它内置 AI SDK、JSON:API Resources 及原生向量搜索,支持属性驱动开发与队列路由,大幅提升开发效率。相比旧版,13.2.0 优化了缓存 TTL 管理与实时通信,无需 Redis 即可横向扩展。作为现代 Web 开发首选,它兼顾安全与极速体验,助您快速构建企业级应用。
下载
为了解决此问题,根据协变规则,应该修改
save
方法中的参数类型。有两种方法:
使用空接口:
创建一个空接口,让所有
xxxrequest
都实现它。然后在接口中将
save
方法的参数类型指定为该空接口。
限制为laravelrequest:
由于所有
xxxrequest
继承自 laravel 的 request,因此可以在接口中将
save
方法的参数类型限制为 laravel request。
修复后代码:
方法 1(空接口):
方法 2(限制为 laravel request):
这样一来,在实现类中将
adminrequest
作为
save
方法的
$request
参数将不再报错。
interface iadmincontroller
{
function save(irequestobject $request): array;
}interface IAdminController
{
function save(Request $request): array;
}