Aller au contenu principal

Examen blanc Niveau 2 - PHP avancé

Formation PHP-Laravel – Dresseur de Code


Objectif

Vérifier la maîtrise du Niveau 2 : POO, PHP 8+, exceptions, PDO/requêtes préparées, MVC et bonnes pratiques.
Réussite requise (14/20 minimum) pour accéder au Niveau 3 – Laravel fondamental.


Partie 1 – POO (4 pts)

Q1.1 (2 pts) Définir une classe Article avec propriétés privées title et price, un constructeur, et des getters getTitle() et getPrice(). Instancier un article et afficher son titre.

Q1.2 (2 pts) Quelle est la différence entre public, protected et private ? Dans quel cas utiliser private pour une propriété ?

Correction Q1.1
class Article {
public function __construct(
private string $title,
private float $price,
) {}
public function getTitle(): string { return $this->title; }
public function getPrice(): float { return $this->price; }
}
$a = new Article("Book", 19.99);
echo $a->getTitle();

Partie 2 – Exceptions & PHP moderne (4 pts)

Q2.1 (2 pts) Écrire un bloc try/catch qui appelle une fonction loadUser($id) et attrape une UserNotFoundException pour afficher "User not found", et toute autre Throwable pour afficher "Error".

Q2.2 (2 pts) À quoi sert declare(strict_types=1); ? Et l’opérateur ?-> en PHP 8 ?

Correction Q2.1
try {
$user = loadUser($id);
} catch (UserNotFoundException $e) {
echo "User not found";
} catch (Throwable $e) {
echo "Error";
}

Partie 3 – Base de données & sécurité (6 pts)

Q3.1 (3 pts) Écrire le code PDO pour : préparer une requête SELECT * FROM users WHERE email = :email, exécuter avec la variable $email, récupérer une ligne. Utiliser uniquement des requêtes préparées.

Q3.2 (3 pts) Pourquoi ne doit-on jamais concaténer une variable utilisateur dans une requête SQL ? Comment se protéger ?

Correction Q3.1
$stmt = $pdo->prepare("SELECT * FROM users WHERE email = :email");
$stmt->execute(["email" => $email]);
$user = $stmt->fetch();

Partie 4 – Architecture (6 pts)

Q4.1 (3 pts) Dans le pattern MVC, où placez-vous : (a) la requête SQL qui récupère un utilisateur, (b) le fichier HTML qui affiche le profil, (c) le code qui décide quelle vue afficher après un clic ?

Q4.2 (3 pts) Expliquer le principe « Single Responsibility » (SOLID) et donner un exemple concret (une mauvaise et une bonne répartition).

Details

Réponses attendues Q4.1 (a) Model (ou Repository). (b) View. (c) Controller.


Barème (total 20 pts)

PartiePoints
1 – POO4
2 – Exceptions & PHP 84
3 – BDD & sécurité6
4 – Architecture6
Total20

Barème : 20 points. Passage au Niveau 3 à partir de 14/20.