2016-05-24 6 views
0

Я хотел бы получить более глубокие знания об использовании статических методов. Я использую larvel 5.2 framework для своего приложения.Объяснение, необходимое для laravel, избегать использования статического доступа

В моем приложении в основном я использовал статические функции, например у меня есть название модели класса, как должность и имя методы get_post() и его объявлен как статические, только если я пропустил статическое ключевое слово в Laravel он выдает ошибку

class Post extends Eloquent(){ 

    public static function get_post(){ 
     return DB::table('post')->get(); 
    } 
} 

в моем контроллере я буду называть это выше метод

Post::get_post() 

Как я мог избежать, чтобы вызвать этот метод как статический? в соответствии с правилом PHPMD 1.4.0

Любой, пожалуйста, объясните это четко.

ответ

1

Larvel's Eloquent вызывается через статический метод, поэтому я не уверен, как этого избежать. Кстати, вместо функций, которые вы написали, вы, конечно, можете написать

Post::all(); 

Другая абстракция возможность заключается в том, чтобы использовать Repository Pattern, где контроллер не вызывать функции этой модели напрямую, а скорее что-то вроде

$activePosts = $postRepository->getActiveAndApproved(); 

, где $postRepository будет выполнять тяжелую работу по модели Laravel's Eloquent, например, ->where('something', true) и тому подобное - Symfony уже немного сильнее включила их в свои рамки.

Для получения более подробных инструкций см. https://bosnadev.com/2015/03/07/using-repository-pattern-in-laravel-5/.

Учитывая, что Laravel часто использует Facades, что упрощает доступ к функциям в контейнере обслуживания (например, см. config/app.php или https://laravel.com/docs/5.2/facades), может быть трудно избежать статических вызовов функций.

+0

Перемещение использования вызова статического метода в репозиторий не изменяет использование фасада (или статических методов), оно просто перемещает его в другое место. – datashaman