POO PHP
Qu'est-ce que la programmation orientée objet?
Qu'est-ce qu'un objet?
Un objet est un nouvel élément en programmation. Pour être plus précis, un objet c'est... un mélange de plusieurs variables et fonctions.Cela signifie que tout le code d'une application est stoké à l'intérieur d'un simple cube de façon à les masquer à l'utilisateur. Ce cube est ce qu'on appelle un objet.
En clair, programmer de manière orientée objet, c'est créer du code source (potentiellement complexe) mais que l'on masque en le plaçant à l'intérieur d'un cube (un objet) à travers lequel on ne voit rien. Pour la personne qui va l'utiliser, travailler avec un objet est donc beaucoup plus simple qu'avant : il suffit d'appuyer sur des boutons et on n'a pas besoin d'être diplômé en chimie pour s'en servir.
Pourquoi on a un jour inventé la programmation orientée objet? En deux mots : simplifier la réutilisation de morceaux du programme.
Définir une classe pour créer des objets
Un objet est un ensemble de variables et de fonctions, regroupées dans un même endroit. On dit qu'on y encapsule les données. Pour pouvoir créer un objet, vous devez d'abord définir une classe. La classe est une sorte de plan qui indique comment créer des objets.Imaginez par exemple une classe Maison : c'est le plan de construction. Grâce à la classe, on peut ensuite créer plusieurs objets (maisonDeMathieu, maisonDeJulie ...).
Créer une classe
Lorsqu'on crée une classe, on la place dans un fichier à son nom.
Maison.php :
Les mots-clés et public et private indiquent si ces éléments sont accessibles de l'extérieur de la classe.
Il y a 2 types d'éléments dans la classe :
◊ Des variables membres
◊ Des fonctions membres
Comme je vous le disais, variables et fonctions sont encapsulées dans la classe. Cela permet de ne pas les mélanger avec d'autres variables et fonctions du même nom dans votre programme. Vous pouvez donc sans problème avoir 2 fonctions nommées ouvrirPorte dans votre code, à condition qu'elles soient dans des classes différentes.
<?php
class Maison {
// Variables membres
private $largeur;
private $longueur;
private $nombreEtages;
private $porte;
private $temperature;
// Fonctions membres
public function ouvrirPorte() {
// ...
}
public function fermerPorte() {
// ...
}
public function modifierTemperature($temperature) {
// ...
}
}
Il y a 2 types d'éléments dans la classe :
◊ Des variables membres
◊ Des fonctions membres
Comme je vous le disais, variables et fonctions sont encapsulées dans la classe. Cela permet de ne pas les mélanger avec d'autres variables et fonctions du même nom dans votre programme. Vous pouvez donc sans problème avoir 2 fonctions nommées ouvrirPorte dans votre code, à condition qu'elles soient dans des classes différentes.
Instancier des objets
La classe créée ne suffit pas. Si nous voulons l'utiliser, nous devons l'instancier pour créer... des objets. En gros, avec la classe on a créé le plan... il faut maintenant construire la maison ! On va créer ces objets dans un autre fichier. Vous pouvez appeler celui-ci comme vous voulez, disons que c'est index.php :<?php
// Chargement de la classe
require_once("Maison.php");
// Instanciation d'un objet
$maisonDeMathieu = new Maison();
// Instanciation d'un autre objet
$maisonDeJulie = new Maison();
$maisonDeMathieu->ouvrirPorte();
$maisonDeMathieu->fermerPorte();
$maisonDeMathieu->modifierTemperature(21);
$maisonDeJulie->modifierTemperature(55);
Ce code fait plusieurs choses :
◊ Il charge la classe en mémoire. Eh oui, comme les fonctions, si vous ne les avez pas incluses au préalable, vous ne pourrez pas les utiliser !
◊ Il instancie des objets à partir de cette classe (la maisonDeMathieu et la maisonDeJulie ). $maisonDeMathieu et $maisonDeJulie ne sont donc pas des variables mais des objets !
◊ Puis il appelle différentes fonctions membres de ces objets pour les modifier. Il ouvre puis ferme la porte de la maison de Mathieu, lui met la température à 21°... Chaque objet étant indépendant, comme vous pouvez le voir j'ai pu m'amuser un peu et monter le thermostat à 55° dans la maison de Julie.
On ne peut appeler que les éléments publics de la classe (ici, nos fonctions). Je ne peux donc pas directement modifier la variable $temperature qui est privée, je dois passer par la fonction modifierTemperature. Cette façon de fonctionner s'appelle le principe d'encapsulation. Passer par des fonctions permet par exemple de contrôler qu'on ne met pas la température à 2000° non plus :-)
Vous vous souvenez de cette ligne un peu bizarre que je vous avais demandé d'utiliser sans poser de questions dans le cours PHP ?
<?php
$db = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', 'root');