将任何模型扩展传递给控制器​​方法

时间:2017-01-09 22:41:43

标签: php laravel oop inheritance type-hinting

我有这样的事情:

class ModelA extends Model {}
class ModelB extends Model {}
class DefaultController extends Controller {
    protected function getData(Model $model) {
        return $model::where(...)->first();
    }
}
class MyControllerA extends DefaultController {
    private function show() {
        $this->getData(new ModelA);
        // Error: Must be Model, but ModelA given.
    }
}
class MyControllerB extends DefaultController {
    private function show() {
        $this->getData(new ModelB);
        // Error: Must be Model, but ModelB given.
    }
}

我想将Model的任何实例传递给function getData,因为在该方法中我只会使用Model个实例。当我传递ModelA PHP实例时,会抛出Model作为参数的错误。我无法定义getData(ModelA $model),因为我需要将任何模型子类(例如ModelB)传递给该方法。

据我所知,如果Modelabstract,我可以这样做,但事实并非如此。

0 个答案:

没有答案