Aller au contenu

Pourquoi la POO avant Laravel

Séance 1 · ~1 période

Slides du chapitre (PDF)PDF

Vous êtes ici pour apprendre Laravel. Pourtant, les deux premières semaines de ce cours ne parlent pas de Laravel. Elles parlent de programmation orientée objet, la POO. Ce chapitre explique pourquoi, et comment les six séances qui viennent vont se passer.

1. Vingt lignes de Laravel

Voici deux fichiers que vous écrirez en semaine 4. Ce sont de vrais fichiers Laravel, tels qu'ils sortent d'un projet neuf.

Le contrôleur, app/Http/Controllers/PostController.php :

<?php

namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\View\View;

class PostController extends Controller
{
    public function index(): View
    {
        $posts = Post::latest()->get();

        return view('posts.index', ['posts' => $posts]);
    }
}

Le contrôleur annoté : import, classe qui hérite, appel statique

Le modèle, app/Models/Post.php :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\HasMany;

class Post extends Model
{
    use HasFactory;

    protected $fillable = ['title', 'body'];

    public function comments(): HasMany
    {
        return $this->hasMany(Comment::class);
    }
}

Le modèle annoté : trait, propriété protégée, appel sur une instance

Ces vingt lignes ne calculent rien. Elles déclarent des objets et des liens entre eux. Pour les lire, il faut connaître huit mots.

Ce que vous voyez Ce que c'est Chapitre
class PostController une classe, le moule dont on tire des objets 1
extends Model l'héritage : Laravel a déjà écrit l'essentiel de la classe 6
use HasFactory; dans la classe un trait, du code ajouté à la classe 7
use App\Models\Post; en haut du fichier un import : même mot, autre chose 2
Post::latest() un appel statique, adressé à la classe 1
$this->hasMany(...) un appel sur une instance, adressé à un objet 1 et 5
protected $fillable une propriété que la classe garde pour elle : l'encapsulation 1 et 3
Comment::class, HasMany des types qui sont des classes 5 et 7
new absent : alors qui fabrique ces objets ? 5 et 11

Si ce tableau vous paraît obscur, c'est normal. La documentation de Laravel suppose que tout cela est acquis. Le but des deux prochaines semaines est simple : rendre ces vingt lignes évidentes. Rien de plus.

2. Les six séances

Carte des six séances

Tous les exemples et tous les katas racontent la même histoire : le Donjon, un petit jeu de rôle dans le terminal. Un héros, un dé, un sac, des monstres. Un seul décor, pour que votre attention aille aux concepts et pas au contexte. À la fin du bloc, au chapitre 10, vous assemblez toutes ces briques en un jeu complet, chez vous, sans code fourni.

3. Une séance type

Une séance dure cinq périodes. Elle se déroule presque toujours de la même façon.

  1. Un code qui sent mauvais. Cinq minutes, en binôme. Un extrait de code fonctionne, mais quelque chose cloche. Vous cherchez quoi. Ce défaut est le sujet du jour.
  2. La théorie. Une lecture courte, avec des exemples que vous pouvez lancer chez vous. Chaque chapitre tient en une heure de lecture.
  3. Le kata. Un exercice court qu'on répète, comme en arts martiaux. Un dépôt GitHub contient des tests déjà écrits et des classes vides. Vous écrivez le code qui fait passer les tests au vert, niveau par niveau. Vous poussez, et GitHub relance les tests sur une machine neuve. Vert, vous continuez. Rouge, le message dit où regarder.
  4. La revue. En fin de séance, on lit ensemble le code d'un binôme volontaire.

Quand vous bloquez, demandez. La première réponse sera une piste, pas la solution. Si la piste ne suffit pas après un vrai essai, vous aurez la solution, expliquée. Les premiers katas sont très guidés. Les suivants le sont de moins en moins, jusqu'au chapitre 10, où vous partez d'une feuille blanche.

4. L'IA

Vous pouvez utiliser ChatGPT, Claude ou Copilot pendant ce cours. Une seule règle : vous devez pouvoir réécrire seul ce que vous rendez. Une bonne façon de s'en servir est de lui demander d'expliquer un message d'erreur ou de critiquer votre code, puis de vérifier sa réponse en lançant les tests. Une mauvaise façon est de coller l'énoncé et de recopier la réponse. Au chapitre 10, que vous ferez seuls, notez les questions que vous lui avez posées et ce que vous en avez gardé.

5. Vos prérequis PHP

Huit questions, cinq minutes, aucune note. Répondez dans votre tête, puis retournez la carte. Trois erreurs ou plus : relisez le chapitre Introduction avant la séance 2, et dites-le au professeur.

Que renvoie strlen('donjon') et de quel type est cette valeur ?

6, un int. Une fonction renvoie une valeur. Si vous ne la stockez pas et ne l'affichez pas, elle est perdue.

Quelle est la différence entre return et echo dans une fonction ?

echo affiche tout de suite et ne rend rien. return rend une valeur à celui qui a appelé la fonction, et arrête la fonction.

Après $hp = 10; $hp -= 3;, que vaut $hp ?

7. -= est un raccourci pour $hp = $hp - 3;.

Quelle est la différence entre un tableau indexé et un tableau associatif ?

Le tableau indexé a des clés entières automatiques : ['épée', 'potion'], on lit $items[0]. L'associatif a des clés que vous choisissez : ['name' => 'Arthur'], on lit $hero['name']. En PHP, c'est le même type array.

Que fait foreach ($items as $key => $value) de plus que foreach ($items as $value) ?

Il donne la clé en plus de la valeur à chaque tour. On prend la forme courte tant qu'on n'a pas besoin de la clé.

Que vaut '10' == 10 en PHP 8 ? Et '10' === 10 ?

true, puis false. == compare après conversion, === compare aussi le type. Écrivez toujours ===.

Que signifie le type ?int dans function findHero(string $name): ?int ?

Un int ou null. Le ? autorise l'absence de valeur. C'est la façon propre de dire « je n'ai rien trouvé ».

Quelle est la différence entre une variable qui vaut null et une variable qui n'existe pas ?

null est une valeur : la variable existe et elle est vide. Une variable qui n'existe pas déclenche Warning: Undefined variable. Les deux se testent avec isset() ou ??.

À retenir

  • Deux semaines de POO servent à lire Laravel, pas à faire de la théorie.
  • Un seul décor pour les exemples et les katas : le Donjon.
  • Chaque séance : un code qui cloche, une lecture courte, un kata testé, une revue.
  • Les tests et la CI vous répondent tout de suite : vert, on avance ; rouge, le message dit où regarder.
  • L'IA est permise, à condition de pouvoir refaire seul ce que vous rendez.

Exercices

  1. Faites le quiz sans relire vos notes. Comptez vos erreurs.
  2. Relisez les vingt lignes de Laravel et écrivez en français ce que fait, selon vous, Post::latest()->get(). Gardez votre réponse : on la ressortira au chapitre 11.
  3. Préparez votre machine : un compte GitHub, et un terminal où php --version et composer --version répondent. Le chapitre 2 s'occupe du reste.