PHP Orientée Objet

Apprendre la POO en php

PHP Orientée Objet

Apprendre la POO en php

Quelques Prérequis avant de commencer

PHP Orientée Objet

Apprendre la POO en php

Quelques Prérequis avant de commencer

  • Connaître PHP (les boucles, variables, conditions et fonctions)

PHP Orientée Objet

Apprendre la POO en php

Quelques Prérequis avant de commencer

  • Connaître PHP (les boucles, variables, conditions et fonctions)
  • Connaître MySql (les requètes SQL, la base de données)

PHP Orientée Objet

Apprendre la POO en php

Quelques Prérequis avant de commencer

  • Connaître PHP (les boucles, variables, conditions et fonctions)
  • Connaître MySql (les requètes SQL, la base de données)
  • Avoir un éditeur de code (comme VSCode)

PHP Orientée Objet

Apprendre la POO en php

Quelques liens utiles

PHP Orientée Objet

Apprendre la POO en php

Un objet c'est quoi ?

PHP Orientée Objet

Un objet c'est quoi ?

Les objets en PHP sont un nouveaux type de variables

Vous connaissez surement les types suivant :

PHP Orientée Objet

Un objet c'est quoi ?

Les objets en PHP sont un nouveaux type de variables

Vous connaissez surement les types suivant :

  • string
  • int
  • float
  • Array

PHP Orientée Objet

Concrètement, ça ressemble à quoi ?

PHP Orientée Objet

Concrètement, ça ressemble à quoi ?

Voici un exemple d'utilisation de Date en PHP :

<?php

// Spécifie la timezone à utiliser
date_default_timezone_set('Europe/Paris');

// Voici une date sous forme de chaine de character
$date = "2021-05-05";
// Nous ajoutons 3 mois à cette date
$newDate = date('Y-m-d', strtotime($date . ' +3 months'));
// Nous affichons la nouvelle date en format français
echo date('d/m/Y', strtotime($newDate));

PHP Orientée Objet

Concrètement, ça ressemble à quoi ?

Nous pouvons améliorer l’exemple grâce à des fonctions :

<?php

// Voici une date sous forme de chaine de character
$date = "2021-05-05";

// Nous ajoutons 3 mois à cette date
$newDate = addMonths($date, 3)

// Nous affichons la nouvelle date en format français
echo formatDate($newDate, 'd/m/Y');

PHP Orientée Objet

Concrètement, ça ressemble à quoi ?

Ou bien nous pouvons utiliser un objet :

<?php
// Création de l'objet "MaDate"
$date = new MyDate('2021-05-05');

// On ajoute 3 mois
$date->addMonths(3);

// On formate la date en français
echo $date->format('d/m/Y');

PHP Orientée Objet

Ça sert à quoi ?

PHP Orientée Objet

Ça sert à quoi ?

Les objets possèdent de nombreux avantages :

PHP Orientée Objet

Ça sert à quoi ?

Les objets possèdent de nombreux avantages :

  • Un code plus claire

PHP Orientée Objet

Ça sert à quoi ?

Les objets possèdent de nombreux avantages :

  • Un code plus claire
  • Une meilleur organisation

PHP Orientée Objet

Ça sert à quoi ?

Les objets possèdent de nombreux avantages :

  • Un code plus claire
  • Une meilleur organisation
  • Moins de répétition de code

PHP Orientée Objet

Ça sert à quoi ?

Les objets possèdent de nombreux avantages :

  • Un code plus claire
  • Une meilleur organisation
  • Moins de répétition de code
  • Plus facile à utiliser

PHP Orientée Objet

Ça marche comment ?

PHP Orientée Objet

Ça marche comment ?

Afin d'utiliser des objets nous devons tout d'abord créer :

une instance

PHP Orientée Objet

Ça marche comment ?

Afin d'utiliser des objets nous devons tout d'abord créer :

une instance

Une instance se créé avec le mot clef :

new

PHP Orientée Objet

Ça marche comment ?

Éxemple, création d'instance de MyDate :

<?php

$firstDate = new MaDate('2021-05-10');
$secondDate = new MaDate('2021-05-12');

PHP Orientée Objet

Ça marche comment ?

Éxemple, création d'instance de MyDate :

<?php

$firstDate = new MaDate('2021-05-10');
$secondDate = new MaDate('2021-05-12');

Création d'une première instance de MyDate le 10 mai 2021

PHP Orientée Objet

Ça marche comment ?

Éxemple, création d'instance de MyDate :

<?php

$firstDate = new MaDate('2021-05-10');
$secondDate = new MaDate('2021-05-12');

Création d'une secondes instance de MyDate le 12 mai 2021

PHP Orientée Objet

Ça marche comment ?

Chaque instances est indépendante !

<?php

$firstDate = new MaDate('2021-05-10');
$secondDate = new MaDate('2021-05-12');

echo $firstDate->format('d/m/Y');
echo $secondDate->format('d/m/Y');

Affiche : "10/05/2021"

PHP Orientée Objet

Ça marche comment ?

Chaque instances est indépendante !

<?php

$firstDate = new MaDate('2021-05-10');
$secondDate = new MaDate('2021-05-12');

echo $firstDate->format('d/m/Y');
echo $secondDate->format('d/m/Y');

Affiche : "12/05/2021"

PHP Orientée Objet

Ça marche comment ?

Afin de pouvoir créer une instance nous utilisons un schéma de construction :

La Class

PHP Orientée Objet

Ça marche comment ?

Dans notre éxemple: MyDate

<php

$date = new MyDate('2021-05-20');

Nom de la Class

Création de l'instance

Variable qui contiendra l'instance

PHP Orientée Objet

Ça marche comment ?

Dans notre éxemple: MyDate

<php

$date = new MyDate('2021-05-20');

On dit ici que :

$date est une instance de la class « MyDate »

PHP Orientée Objet

Ça marche comment ?

Un objet PHP contient des variables interne que l'on appel 

Des Propriétés

PHP Orientée Objet

Ça marche comment ?

Voici un éxemple de propriétés simple avec la class MyDate

<php

$date = new MyDate('2021-05-20');

// Notre objet date contient des propriétés (comprenez variable)
// pour chaque membre de la date :
$date->day // Contient 20
$date->month // Contient 05
$date->year // Contient 2021

PHP Orientée Objet

Ça marche comment ?

Tout comme les variables nous pouvons changer leurs valeurs :

<php

$date = new MyDate('2021-05-20');

// On change le jour de notre date
$date->day = 25;

echo $date->format('d/m/Y'); // affiche 25/05/2021

PHP Orientée Objet

Ça marche comment ?

Les objets en PHP contiennent aussi des fonctions que l'on appel :

Les Méthodes

PHP Orientée Objet

Ça marche comment ?

Voici un exemple de méthode sur notre objet MyDate

<php

$date = new MyDate('2021-05-20');

$date->addMonths(3);

echo $date->format('d/m/Y');

PHP Orientée Objet

Ça marche comment ?

Voici un exemple de méthode sur notre objet MyDate

<php

$date = new MyDate('2021-05-20');

$date->addMonths(3);

echo $date->format('d/m/Y');

On utilise la méthode "addMonth" sur l'instance de MyDate

PHP Orientée Objet

Ça marche comment ?

Voici un exemple de méthode sur notre objet MyDate

<php

$date = new MyDate('2021-05-20');

$date->addMonths(3);

echo $date->format('d/m/Y');

On utilise la méthode "format" sur l'instance de MyDate

PHP Orientée Objet

Ça marche comment ?

Pour résumer tout ça ! Un objet c'est :

  • Un schéma de construction : La Class
  • Une instance que l'on créé avec "new"
  • Des propriétés (les variables de notre objet)
  • Des méthodes (les fonctions de notre objet)

PHP Orientée Objet

Écrire notre première class

PHP Orientée Objet

Écrire notre première class

Afin de bien comprendre comment fonctionne les objets nous allons maintenant créer notre première class

Un Personnage

PHP Orientée Objet

Écrire notre première class

Créons un fichier PHP dans 'src/Personnage.php'  et plaçons le code suivant :

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;
}

PHP Orientée Objet

Écrire notre première class

Maintenant importons et utilisons notre première class dans `public/index.php` :

<?php

require_once '../src/Personnage.php';

$merlin = new Personnage();

var_dump($merlin);

PHP Orientée Objet

Écrire notre première class

Nous pouvons maintenant afficher le résultat dans notre navigateur :

PHP Orientée Objet

Écrire notre première class

Rétournons dans `src/Personnage.php` afin de comprendre

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;
}

Ici nous créons un schéma de construction : une class Personnage

PHP Orientée Objet

Écrire notre première class

Rétournons dans `src/Personnage.php` afin de comprendre

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;
}

ATTENTION !

Les class commencent toutes par une Majuscule et correspondent au nom de notre fichier PHP !

PHP Orientée Objet

Écrire notre première class

Rétournons dans `src/Personnage.php` afin de comprendre

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;
}

Si notre class s'appel Personnage alors notre fichier PHP doit s'appeler Personnage.php

PHP Orientée Objet

Écrire notre première class

Rétournons dans `src/Personnage.php` afin de comprendre

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;
}

Ici nous déclarons 2 propriétés : "$vie" et "$attack"

PHP Orientée Objet

Écrire notre première class

Un propriété possède 4 sections :

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;
}

Valeur de la propriété

Nom de la propriété

Type de la propriété, ici "int"

La porté de notre propriété (nous en reparlerons un peu plus tard :) )

PHP Orientée Objet

Écrire notre première class

Maintenant regardons comment utiliser notre personnage :

<?php

require_once '../src/Personnage.php';

$merlin = new Personnage();

var_dump($merlin);

Nous importons le fichier PHP de notre class

PHP Orientée Objet

Écrire notre première class

Maintenant regardons comment utiliser notre personnage :

<?php

require_once '../src/Personnage.php';

$merlin = new Personnage();

var_dump($merlin);

Création d'une première instance de Personnage : $merlin

PHP Orientée Objet

Écrire notre première class

Maintenant regardons comment utiliser notre personnage :

<?php

require_once '../src/Personnage.php';

$merlin = new Personnage();

var_dump($merlin);

Nous déboguons notre objet

PHP Orientée Objet

Écrire notre première class

Nous pouvons maintenant jouer avec notre objet PHP :

<?php

require_once '../src/Personnage.php';

$merlin = new Personnage();
$merlin->vie = 50;
$merlin->attaque = 40;

$arthur = new Personnage();
$arthur->vie = 100;
$arthur->attaque = 30;

var_dump($merlin);
var_dump($arthur);

PHP Orientée Objet

Écrire notre première class

Voici ce que notre navigateur nous affiche 

PHP Orientée Objet

Écrire notre première class

Il est possible dans une méthode de faire référence à l'instance en cours et d'accéder au propriétés de notre objet en utilisant

$this

PHP Orientée Objet

Écrire notre première class

Exemple : Une méthode qui régénère notre Personnage

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;

    public function regenerer(): void
    {
        $this->vie = 100;
    }
}

PHP Orientée Objet

Écrire notre première class

Voici comment écrire une méthode !

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;

    public function regenerer(): void
    {
        $this->vie = 100;
    }
}

Type de retour de notre méthode. Ici void signifie rien du tout car notre méthode n'as pas d'instruction "return"

PHP Orientée Objet

Écrire notre première class

Voici comment écrire une méthode !

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;

    public function regenerer(): void
    {
        $this->vie = 100;
    }
}

Nom de la fonction

PHP Orientée Objet

Écrire notre première class

Voici comment écrire une méthode !

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;

    public function regenerer(): void
    {
        $this->vie = 100;
    }
}

Porté de la fonction (nous verrons cela un peu plus tard :) )

PHP Orientée Objet

Écrire notre première class

Voici comment écrire une méthode !

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;

    public function regenerer(): void
    {
        $this->vie = 100;
    }
}

Nous pouvons faire référence à l'instance en cour et accéder au propriétés de notre objet en utilisant $this

PHP Orientée Objet

Écrire notre première class

Utilisons notre méthode "régénérer"

<?php

require_once '../src/Personnage.php';

$merlin = new Personnage();
$merlin->vie = 50;
$merlin->attaque = 40;
$merlin->regenerer();

$arthur = new Personnage();
$arthur->vie = 100;
$arthur->attaque = 30;

var_dump($merlin);
var_dump($arthur);

PHP Orientée Objet

Écrire notre première class

Tout comme les fonctions, les méthodes peuvent recevoir des paramètres :

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;

    public function regenerer(int $vie = 100): void
    {
        $this->vie = $this->vie + $vie;
    }
}

PHP Orientée Objet

Écrire notre première class

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;

    public function regenerer(int $vie = 100): void
    {
        $this->vie = $this->vie + $vie;
    }
}

La valeur par défaut de notre paramètre

PHP Orientée Objet

Écrire notre première class

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;

    public function regenerer(int $vie = 100): void
    {
        $this->vie = $this->vie + $vie;
    }
}

Le nom de notre paramètre

PHP Orientée Objet

Écrire notre première class

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;

    public function regenerer(int $vie = 100): void
    {
        $this->vie = $this->vie + $vie;
    }
}

Le type de notre paramètre

PHP Orientée Objet

Écrire notre première class

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;

    public function regenerer(int $vie = 100): void
    {
        $this->vie = $this->vie + $vie;
    }
}

On assigne la vie de notre objet à la valeur envoyé en paramètre

PHP Orientée Objet

Écrire notre première class

Utilisons la méthode régénérer avec un paramètre !

<?php

require_once '../src/Personnage.php';

$merlin = new Personnage();
$merlin->vie = 50;
$merlin->attaque = 40;
$merlin->regenerer(20);

$arthur = new Personnage();
$arthur->vie = 100;
$arthur->attaque = 30;

var_dump($merlin);
var_dump($arthur);

PHP Orientée Objet

Écrire notre première class

Exercice

Écrire une méthode "afficher" qui affiche la vie et l'attaque du personnage et utiliser la méthode dans `public/index.php`

PHP Orientée Objet

Écrire notre première class

Solution

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;

    public function regenerer(int $vie = 100): void
    {
        $this->vie = $this->vie + $vie;
    }

    public function afficher(): void
    {
        echo 'Ce personnage a '
            . $this->vie
            . ' points de vie et '
            . $this->attaque
            . ' en attaque.';
    }
}

PHP Orientée Objet

Écrire notre première class

Solution

<?php

require_once '../src/Personnage.php';

$merlin = new Personnage();
$merlin->vie = 50;
$merlin->attaque = 40;
$merlin->regenerer(20);

$arthur = new Personnage();
$arthur->vie = 100;
$arthur->attaque = 30;

$merlin->afficher();

echo '<br/>';

$arthur->afficher();

PHP Orientée Objet

Écrire notre première class

Exercice

Créer une fonction "attaquer" qui reçoit un Personnage et enlève la vie du personnage en fonction de son attaque !

Utiliser cette méthode dans `public/index.php`

PHP Orientée Objet

Écrire notre première class

Solution

<?php

class Personnage
{
    public int $vie = 100;

    public int $attaque = 20;
    
    public function attaquer(Personnage $cible): void
    {
        $cible->vie = $cible->vie - $this->attaque;
    }

    public function regenerer(int $vie = 100): void
    { ...
    }

    public function afficher(): void
    { ...
    }
}

PHP Orientée Objet

Écrire notre première class

Solution

<?php

require_once '../src/Personnage.php';

$merlin = new Personnage();
$merlin->vie = 50;
$merlin->attaque = 40;

$arthur = new Personnage();
$arthur->vie = 100;
$arthur->attaque = 30;

$arthur->attaquer($merlin);

$merlin->afficher();

echo '<br/>';

$arthur->afficher();

PHP Orientée Objet

Écrire notre première class

Le constructeur

Nos objets possèdent une méthode spécial qui nous permet de construire notre instance :

PHP Orientée Objet

Écrire notre première class

Nous pouvons facilement définir un constructeur 

Copy of deck

By David Jegat

Copy of deck

Apprendre la Programmation Orientée Objet en PHP.

  • 50