H2 - P2019

Développement web

Cours 32 - 2016-05-09

PHP Orienté objet

Problème

Code organisé à l'arrache (procédural, spaghetti)


<?php
    
    // Some php here

?><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    
</body>
</html>
                    

Solutions

  • Organiser dans des fichiers PHP
  • Utiliser des fonctions

Plusieurs problèmes

  • Mêmes noms de variables et de fonctions
  • Mal organisé
  • Pas de hiérarchie
  • Pas maintenable
  • Difficilement réutilisable

Solution

Organiser la logique dans des objets

Exemple PDO :


$pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_NAME,DB_USER,DB_PASS);

$pdo->exec('INSERT INTO ...');
$query = $pdo->query('SELECT ...');
                    

On parle de code orienté objet, de classe, d'instance, de modèle, ...

Ces termes sont liés, mais n'ont pas le même sens

Exemple 1

Création d'une classe


class MyClass
{
    public $foo = 'bar';

    public function doSomething()
    {
        echo '
foo is equal to '.$this->foo; } }

$myClass = new MyClass();
$myClass->doSomething();
                    

Instances

  • Le nom de la classe est en général en PascalCase
  • $myClass correspond à une instance de la classe MyClass
  • Il est possible d'instancier plusieurs objets avec une même classe
    
    $myClass1 = new MyClass();
    $myClass2 = new MyClass();
    $myClass3 = new MyClass();
                                

Propriétés

  • $foo est une propriété
  • On utilise en général de l'underscore ou du camelCase
  • À l'intérieur de la classe, on y accède avec $this->foo
  • À l'extérieur de la classe, on y accède avec $instance->foo
    
    $myClass = new MyClass();
    echo $myClass->foo;
                                

Méthodes

  • doSomething est une fonction, mais on parle de méthode car elle à l'intérieur d'un objet
  • Cette méthode s'appelle comme une propriété, mais en rajoutant () pour la déclencher
  • Il est possible de les appeler plusieurs fois
    
    $myClass = new MyClass();
    $myClass->doSomething();
    $myClass->doSomething();
    $myClass->doSomething();
                                

Context

  • À l'intérieur des méthodes, $this correspond à l'instance (pas à la classe)
  • Il permet d'appeler les méthodes et de récupérer/modifier les propriétés

Visibilité

Le public devant les propriétés et méthodes correspond à la visibilité. Puisque nous débutons, nous mettrons toujours public.

Pour information, les autres modes de visibilité sont

  • private
  • protected
  • static

Constructeur

Il est possible de déclencher une méthode dès que la classe est instanciée

Il suffit de créer une méthode appellée __construct


class MyClass
{
    public function __construct()
    {
        echo '
Bonjour'; } }

$myClass = new MyClass();
                    

Modèle

On appel Modèle une classe dont le rôle est de traiter une donnée précise

Par exemple, une classe chargée de sauvegarder, récupérer, supprimer ou modifier des dépenses dans une table SQL

Tout ce qui compose notre site peut être orienté objet

  • Router
  • Controllers
  • Vues
  • Cache
  • Formulaire
  • Données de la BDD

Exemple 2

Cf. Correction partiel