Mis à jour le

🐘
Intermediaire 20 questions • PHP

Questions PHP et Laravel

20 questions PHP/Laravel pour les entretiens. POO, Eloquent, middleware, testing et bonnes pratiques.

1. Qu'est-ce que le cycle de vie d'une requête dans Laravel ?

Toute requête entre par public/index.php, qui charge l'autoloader Composer et démarre l'application via bootstrap/app.php. Le kernel HTTP reçoit la requête et la fait passer par les middleware globaux (maintenance mode, cookies, session, CSRF). Le router identifie la route correspondante et execute les middleware de route. Le controleur traite la logique métier et retourne une réponse. La réponse traverse les middleware en sens inverse. Enfin, la réponse est envoyee au client. Le service container (IoC) gere l'injection de dépendances tout au long de ce cycle. Les service providers enregistrent les services au démarrage de l'application.

2. Expliquez Eloquent ORM et ses relations.

Eloquent est l'ORM Active Record de Laravel. Chaque modèle correspond à une table. Relations disponibles : hasOne/belongsTo (un-a-un), hasMany/belongsTo (un-a-plusieurs), belongsToMany (plusieurs-a-plusieurs avec table pivot), hasManyThrough (relation à travers un modèle intermédiaire), morphTo/morphMany (relations polymorphes). Le lazy loading charge les relations à l'accès (risque N+1), le eager loading avec with() charge en une seule requête. Les scopes (locaux et globaux) encapsulent les conditions de requête. Les accessors/mutators transforment les attributs. Les casts convertissent automatiquement les types (JSON, date, enum).

3. Comment fonctionne le système de migration dans Laravel ?

Les migrations sont des fichiers PHP qui définissent les modifications de schéma de base de données de manière versionnee et reversible. Chaque migration a deux méthodes : up() (appliquer) et down() (annuler). Commandes : php artisan migrate (appliquer), migrate:rollback (annuler la dernière batch), migrate:fresh (tout reconstruire). Les migrations utilisent le Schéma Builder pour créer/modifier les tables de manière agnostique au SGBD. Bonnes pratiques : une migration par changement logique, ne jamais modifier une migration déjà deployee, utiliser les seeders et factories pour les données de test. Les colonnes nullable et les valeurs par défaut facilitent les deployments sans interruption.

4. Qu'est-ce que le Service Container et l'injection de dépendances ?

Le Service Container (ou IoC Container) est le cœur de Laravel. Il gere l'instanciation et la résolution des dépendances automatiquement. Quand un controleur type-hint une interface ou une classe, le container l'injecte automatiquement. Trois types de bindings : bind (nouvelle instance à chaque résolution), singleton (une seule instance partagee), instance (objet déjà instancie). Les Service Providers enregistrent les bindings dans la méthode register(). Le container supporte le contextual binding (une implémentation différente selon qui la demande) et l'auto-resolution (pas besoin de binding pour les classes concrètes).

5. Comment sécuriser une application Laravel ?

Laravel fournit de nombreuses protections nativement. CSRF : token genere automatiquement dans les formulaires avec la directive Blade csrf. XSS : l'echappement automatique avec les doubles accolades dans Blade. SQL Injection : Eloquent et le Query Builder utilisent des requêtes paramétrées. Authentification : Sanctum (SPA, mobile), Passport (OAuth2), Breeze/Jetstream pour le scaffolding. Autorisation : Gates (closures) et Policies (classes) pour le contrôle d'accès. Rate limiting configurable par route. Encryption : chiffrement AES-256-CBC avec la cle APP_KEY. Valider toutes les entrées avec les Form Requests. Utiliser signed URLs pour les liens sensibles.

6. Expliquez le fonctionnement des queues et des jobs en Laravel.

Les queues permettent de differer l'exécution de tâches longues (envoi d'emails, traitement d'images, appels API). Un Job est une classe avec une méthode handle(). On dispatch un job avec dispatch(new ProcessPodcast). Drivers supportes : database, Redis, SQS, Beanstalkd. Les workers (php artisan queue:work) consomment les jobs. Fonctionnalités : retry automatique avec backoff exponentiel, failed jobs table pour les échecs, job batching pour les groupes de jobs, rate limiting des jobs, middleware de job pour la logique transverse. Laravel Horizon offre un dashboard de monitoring pour Redis. Toujours superviser les workers avec un process manager (Supervisor).

7. Qu'est-ce que les Events et Listeners dans Laravel ?

Le système d'événements de Laravel implemente le pattern Observer. Un Event est une classe contenant les données de l'événement. Un Listener est une classe avec une méthode handle() qui reagit a l'événement. Enregistrement dans EventServiceProvider ou avec l'attribut ShouldDiscoverEvents. On dispatch avec event(new OrderShipped($order)). Les listeners peuvent être synchrones ou queued (en implémentant ShouldQueue). Utilisation : notifications après une commande, logging d'activité, mise à jour de cache, synchronisation avec des services externes. Les subscribers regroupent plusieurs listeners lies dans une seule classe.

8. Comment optimiser les performances d'une application Laravel ?

Commandes de cache : config:cache, route:cache, view:cache pour la production. Eager loading systematique pour éviter le N+1 (utiliser le package beyondcode/laravel-query-detector en dev). Cache applicatif avec Redis : Cache::remember() pour les requêtes coûteuses. Pagination au lieu de get() sur les grandes collections. Queues pour les tâches lourdes. Database : index sur les colonnes filtrees, select() pour limiter les colonnes, chunk() pour les gros volumes. OPcache pour le cache de bytecode PHP. CDN pour les assets. Laravel Octane (Swoole/RoadRunner) pour garder l'application en mémoire et éviter le bootstrap à chaque requête.

9. Expliquez les API Resources et les Form Requests.

Les API Resources transforment les modèles Eloquent en réponses JSON structurees. Classe avec une méthode toArray() definissant les champs exposes. Les Resource Collections gèrent les listes avec pagination. Avantages : séparation entre modèle et représentation API, logique de transformation centralisée, support conditionnel (whenLoaded pour les relations). Les Form Requests encapsulent la validation dans des classes dédiées. Méthodes : authorize() (autorisation), rules() (règles de validation), messages() (messages personnalisés). Injectees automatiquement dans les contrôleurs. Cela garde les contrôleurs propres et reutilise la validation entre endpoints.

10. Comment tester une application Laravel ?

Laravel utilise PHPUnit (et Pest en alternative). Types de tests : Unit (classes isolees, rapides), Feature (requêtes HTTP, base de données, intégration). Le trait RefreshDatabase remet la base a zéro entre chaque test. Les factories génèrent des modèles avec des données realistes (Faker). Méthodes de test HTTP : get(), post(), assertStatus(), assertJson(), assertSee(). Mocking avec Mockery ou les facades de Laravel (Mail::fake(), Queue::fake(), Event::fake()). Tester les notifications, les jobs, les events avec les fakes integres. Le test browser avec Laravel Dusk pour les tests end-to-end. Viser une couverture des chemins critiques plutôt qu'un pourcentage arbitraire.

Besoin d'aide pour préparer vos entretiens ?

Decrivez votre profil pour des conseils de preparation personnalises.

Recevoir des conseils

Questions fréquentes

PHP est-il mort ?
Non ! PHP 8+ est un langage moderne et performant. Laravel est l'un des frameworks web les plus utilises au monde.

Pages liées

Chaque semaine, le meilleur de la tech française

Tendances, salaires, outils et opportunités — directement dans votre boîte mail.

Gratuit. Desabonnement en un clic. Pas de spam.