Тип Hinting Красноречивые модели

Я пытаюсь писать хороший код, и частью этого является подсказка типов, чтобы облегчить работу в дальнейшем и заставить ожидания.

Это может показаться немного надуманным, но для меня это скорее доказательство концепции.

Я пишу класс, чтобы разделить файл TSV на вкладки и вставить в мою модель. В моем конструкторе я просил:

Illuminate\Database\Eloquent\Model

На что я перешел:

new \App\Model()

И, наконец, ответ об ошибке:

instance of App\Model given

Ясно, что я сделал что-то не так, но я не хочу навязывать использование App\Model, как я могу вообще запросить красноречивую модель?

Изменить для получения дополнительной информации:

Чтобы было понятнее, я использую Laravel 5, модели создаются с помощью artisan make:model. Конструктор выглядит следующим образом:

function __construct ($resource, Illuminate\Database\Eloquent\Model $model, $skip = 0)

И модель, которую я использую (для моего стола фильмов):

use Illuminate\Database\Eloquent\Model;

class Movie extends Model {

person Fireynis    schedule 22.05.2015    source источник
comment
Я не понимаю, как вы передаете \App\Movie(), и он говорит, что вы дали ему экземпляр App\Model. Это была опечатка?   -  person user1669496    schedule 23.05.2015
comment
@user3158900 user3158900 Да, извините, я обновлю вопрос.   -  person Fireynis    schedule 23.05.2015
comment
App\Model расширяет Illuminate\Database\Eloquent\Model? В противном случае исключение имеет смысл.   -  person Bogdan    schedule 23.05.2015
comment
@Bogdan Это не так, но это красноречивая модель. Как я уже сказал, я знаю, что это неправильно, но я не знаю, как на самом деле напечатать намек на красноречивую модель.   -  person Fireynis    schedule 23.05.2015
comment
Модели Eloquent должны расширять Illuminate\Database\Eloquent\Model или другой класс, который его расширяет, иначе они не являются моделями Eloquent. Пожалуйста, отредактируйте вопрос и опубликуйте определение конструктора, где вы вводите намек на параметр.   -  person Bogdan    schedule 23.05.2015
comment
@Bogdan Извините, он расширяет модель, его можно использовать Illuminate\Database\Eloquent\Model; затем он расширяет модель   -  person Fireynis    schedule 23.05.2015


Ответы (1)


В подсказке типа предваряйте FQCN обратной косой чертой:

function __construct ($resource, \Illuminate\Database\Eloquent\Model $model, $skip = 0)

Либо так, либо добавьте оператор use в свой класс:

use Illuminate\Database\Eloquent\Model;

class MyClass {
    function __construct ($resource, Model $model, $skip = 0) {
        //
    }
}
person patricus    schedule 23.05.2015