Publie le 24 mars 2026 Par

30 questions d’entretien PHP/Symfony qu’on vous posera vraiment (avec les réponses)

Vous avez appris PHP et Symfony, vous avez construit des projets, et maintenant vous faites face à un entretien technique. Les questions qui suivent ne viennent pas d’un livre de préparation : elles viennent de vrais entretiens pour des postes juniors en France en 2026. Avec les réponses que les recruteurs attendent — pas des réponses de manuel, des réponses honnêtes.

PHP fondamentaux

1. Quelle est la différence entre `require` et `include` ?

require stoppe le script si le fichier est introuvable (erreur fatale). include émet un warning et continue. En pratique, utilisez toujours require pour les dépendances critiques.

2. C’est quoi le typage en PHP 8 ?

PHP 8 supporte le typage fort des paramètres, valeurs de retour, et propriétés de classe. `declare(strict_types=1)` active la vérification stricte. Les union types (string|int), le type mixed, et les types nullables (?string) permettent d’exprimer la réalité du code.

3. Différence entre interface et classe abstraite ?

Une interface définit un contrat (méthodes à implémenter) sans implémentation. Une classe abstraite peut avoir des méthodes concrètes et de l’état. Une classe peut implémenter plusieurs interfaces mais n’hériter que d’une classe abstraite.

4. C’est quoi un trait en PHP ?

Un mécanisme de réutilisation de code horizontal. Permet de partager des méthodes entre classes sans héritage. Utile pour éviter la duplication quand deux classes sans lien hiérarchique partagent un comportement.

5. Comment fonctionne la gestion des sessions en PHP ?

session_start() crée ou reprend une session. Les données sont stockées côté serveur, un cookie contenant l’ID de session est envoyé au client. Important : régénérer l’ID après authentification pour éviter la fixation de session.

Symfony — Questions courantes

6. Expliquez le pattern MVC dans Symfony

Model (Doctrine Entity) → Controller (traite la requête, appelle les services) → View (Twig). Dans Symfony moderne, on ajoute souvent une couche Service entre le Controller et le Model pour ne pas mettre de logique métier dans le contrôleur.

7. C’est quoi un Service dans Symfony ?

Une classe PHP enregistrée dans le container de services. Symfony les instancie et injecte les dépendances automatiquement via l’autowiring. Exemple : un MailerService qui encapsule la logique d’envoi d’email.

8. Comment fonctionne l’injection de dépendances ?

Les dépendances sont passées via le constructeur (constructor injection) plutôt qu’instanciées dans la classe. Symfony le fait automatiquement via le container de services et l’autowiring — si vous typez un paramètre de constructeur avec une classe de service, Symfony l’injecte.

9. C’est quoi Doctrine et un ORM ?

Un ORM (Object-Relational Mapper) fait le pont entre les objets PHP et la base de données relationnelle. Doctrine permet de manipuler des Entity PHP au lieu d’écrire du SQL brut. L’EntityManager gère la persistance. Les migrations versionnent les changements de schéma.

10. Différence entre find(), findBy() et un Repository custom ?

find($id) récupère par ID. findBy(['field' => 'value']) pour des critères simples. Un Repository custom avec QueryBuilder ou DQL pour des requêtes complexes avec jointures ou conditions multiples.

11. C’est quoi un Event et un EventSubscriber ?

Le système d’événements de Symfony permet de découpler le code. Un EventSubscriber écoute des événements système (kernel.request, kernel.exception) ou custom. Exemple classique : logger automatiquement certaines actions sans modifier les contrôleurs.

12. Comment gérez-vous la sécurité dans Symfony ?

Via le composant Security : firewall, access control dans security.yaml, attributs #[IsGranted] sur les contrôleurs, Voters pour la logique d’autorisation complexe. Les formulaires Symfony incluent une protection CSRF automatique.

13. C’est quoi une Form en Symfony ?

Le composant Form permet de créer, valider et traiter des formulaires HTML liés à des objets PHP. Séparation entre la définition du formulaire (FormType) et son traitement dans le contrôleur. La validation utilise les contraintes Symfony Validator.

14. Comment déboguer une application Symfony ?

La Symfony Debug Toolbar en bas de page en mode dev. dd() (dump and die) et dump(). Les logs dans var/log/dev.log. Le Profiler pour analyser les performances, requêtes SQL, et événements.

15. Comment déployer une application Symfony ?

Variables d’environnement dans .env.prod (jamais dans le code). composer install --no-dev, php bin/console cache:clear --env=prod, doctrine:migrations:migrate. Configurer le webserver pour pointer sur le dossier public/.

Questions sur les bases de données

16. C’est quoi un index SQL et quand l’utiliser ?

Un index accélère les recherches sur une colonne au coût d’un espace disque et d’une écriture légèrement plus lente. À mettre sur les colonnes de recherche fréquente (WHERE), les clés étrangères, et les colonnes utilisées dans ORDER BY.

17. Différence entre JOIN types ?

INNER JOIN : seulement les lignes qui ont une correspondance dans les deux tables. LEFT JOIN : toutes les lignes de la table gauche + correspondances de droite (NULL si absent). RIGHT JOIN : l’inverse. En pratique, INNER et LEFT couvrent 95% des cas.

Questions sur Git et bonnes pratiques

18. Comment organisez-vous vos branches Git ?

Réponse attendue : une branche par feature ou bugfix depuis main ou develop. Pull request pour merger. Ne jamais committer directement sur main en équipe. Nommage clair : feature/user-auth, fix/login-redirect.

19. C’est quoi un code review et pourquoi c’est important ?

Relecture du code par un autre développeur avant merge. Permet de détecter des bugs, partager les connaissances, maintenir un standard de qualité. En tant que junior, c’est votre meilleure source d’apprentissage en équipe.

Questions pièges à connaître

20. « Vous connaissez les design patterns ? »

Ne listez pas des patterns abstraits. Citez ceux que vous avez réellement utilisés : Repository (Doctrine), Service Layer (Symfony), Observer (EventDispatcher). Honnêteté > récitation de liste.

21. « Qu’est-ce qui vous pose encore problème en PHP/Symfony ? »

Ne dites pas « rien ». Cette question teste votre lucidité sur vous-même. Choisissez quelque chose de réel mais non critique : « Je maîtrise les bases de Symfony mais j’approfondis encore les tests avec PHPUnit et les stratégies de cache avancées. »


Prêt pour l’entretien Symfony — trouvez le poste

Offres Symfony et PHP pour juniors et reconvertis. Certains recruteurs mentionnent explicitement que les profils autodidactes sont bienvenus.

À lire aussi : Préparer l’entretien techniqueQuestions d’entretien JavaScriptFront, back ou fullstack : lequel choisir ?

Categories : Emploi développeur