我有类似这样的抽象类
int
和扩展类如
protected function update(Request $request, $id)
{
//function body
}
从请求
扩展注入protected function update(PageRequest $request, $id)
{
//function body
}
PageRequest
我收到此错误
App \ Http \ Controllers \ PagesController :: update()的声明应该 兼容 应用程序\ HTTP \控制器\ MasterController \ CrudController ::更新程序(App \ HTTP \请求\请求 $ request,$ id)
我知道传递所有参数并访问update()方法相同,我想我是正确的。
答案 0 :(得分:4)
正确的方法:
class Request implements RequestInterface
class PageRequest extends Request
功能:
protected function update(RequestInterface $request, $id)
答案 1 :(得分:1)
最佳解决方案是使用界面,如this answer中所述。
另一个解决方案是在子类中声明方法update()
而不更改其签名,并在代码中验证参数的类型是否正确。
这样的事情:
protected function update(Request $request, $id)
{
if (! $request instanceof PageRequest) {
throw new \InvalidArgumentException('Unexpected type ('.get_class($request).') of argument $request. Expecting an object of type PageRequest.');
}
// Do whatever you need to do with $request here
// It is an object of type PageRequest
}
此解决方案在某些上下文中有其自身的优势,但它使代码更加冗长,并添加了额外的代码来运行。