2015-03-07 3 views
0

по умолчанию пользователя Модель в Laravel 4.2 реализует как пользовательского интерфейса и RemindableInterface, но при взгляде на определении моей модели пользователя, те методы, определенные на обоих интерфейсах не реализованы на модели пользователя.Laravel 4,2 путаница интерфейса

use Illuminate\Auth\UserTrait; 
use Illuminate\Auth\UserInterface; 
use Illuminate\Auth\Reminders\RemindableTrait; 
use Illuminate\Auth\Reminders\RemindableInterface; 

class User extends Eloquent implements UserInterface, RemindableInterface { 

    use UserTrait, RemindableTrait; 

    /** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'users'; 

    /** 
    * The attributes excluded from the model's JSON form. 
    * 
    * @var array 
    */ 
    protected $hidden = array('password', 'remember_token'); 

} 

Почему это не вызывает ошибок, если эти методы, определенные на этих двух интерфейсах, не реализованы классом User?

ответ

2

Вы можете видеть, что класс User использует две черты UserTrait и RemindableTrait. Если вы проверите эти черты, вы увидите, что там внедрены необходимые методы. Поэтому классу User не нужно реализовывать эти методы, если они наследуются. Если вы хотите, вы можете реализовать их и переопределить/расширить унаследованные функции.

Методы также могут быть унаследованы и от родительских классов. Таким образом, здесь методы могут быть реализованы в классе Eloquent, что класс User распространяется (хотя это не так).

Вы можете прочитать больше по этим вопросам в PHP документации:

Traits

Object Inheritance

Object Interfaces

+0

Спасибо. Я забыл посмотреть на эти черты. У меня создалось впечатление, что методы, которые должны быть реализованы, должны быть определены на классе реализации, в данном случае на классе User. P.S Я только сейчас вникаю в черты php сегодня. – theUnknown777

Смежные вопросы