
La POO en PHP
Classes
Une classe est dĂ©clarĂ©e avec des attributs (ce quâelle est) et des mĂ©thodes (ce quâelle peut faire) ~ POJO.
Une classe est dans un fichier du mĂȘme nom, son nom commence par une majuscule.
On accĂšde Ă un attribut ou une mĂ©thode dâinstance avec $this-> et Ă un attribut ou mĂ©thode de classe avec self:: ou static::.
static.
Une mĂ©thode qui accĂšde Ă un attribut statique est statique.BP : Pour un tableau en attributs, on nâinitialise pas le tableau dans la liste des attributs mais dans le constructeur, câest plus lisible (de mĂȘme pour les valeurs par dĂ©faut Ă©ventuelles).
BP : On initialise gĂ©nĂ©ralement les attributs de classe dans les listes des attributs (par exemple un compteur dâinstances).
Principe dâencapsulation : on restreint la visibilitĂ© des attributs (private ou protected) et on passe par des getters/setters. On laisse les mĂ©thodes en public pour quâelles soient accessibles et donc utilisables.
On définit un et un seul constructeur avec function __construct(), dans lequel on initialise les paramÚtres avec $this->param1 = $param1 ou via les getters/setters.
$uneInstance = new ClasseSansConstructeur.
BP : GĂ©nĂ©ralement, on crĂ©e nous-mĂȘme un constructeur.On ne peut pas choisir le nom du constructeur, qui est une âmĂ©thode magiqueâ (commence par un double underscore) qui est hĂ©ritĂ© de object et quâon ne peut pas appeler directement.
Il y a aussi __destruct(), __toString(), __call(), __get(), __set(), __isset()âŠ
Héritage
Une classe enfant hĂ©rite dâune classe parent avec extends.
Il faut inclure le fichier de la classe parent avec require_once.
Au sein du constructeur enfant, on appelle le constructeur parent avec parent::__construct(param); (ou directement le nom de la classe), puis on complĂšte avec les attributs additionnels de lâenfant.
Il est possible dâajouter de nouvelles mĂ©thodes et dâen substituer. On appelle une mĂ©thode du parent avec parent::methode().
Classe abstraite
Une classe abstraite est dĂ©clarĂ©e avec abstract class et ne peut pas ĂȘtre instanciĂ©e, une classe doit forcĂ©ment en hĂ©riter.
Elle contient des méthodes abstraites : public abstract function uneMethodeAbstraite();, qui seront complétées selon les classes enfant en héritant.
Interface
Une interface est déclarée avec implements.
Elle ne contient que des mĂ©thodes abstraites : public abstract function uneMethodeAbstraite();, que lâon peut raccourcir function uneMethodeAbstraite();.
Il sâagit dâun âcontrat entre une classe et une interface : quand une classe implĂ©mente une interface, elle est obligĂ©e de dĂ©finir toutes les mĂ©thodes qui sont dans lâinterfaceâ.
Exceptions
Les exceptions sont gérées avec des try...catch...finally.
try {
// instructions a tester
} catch (Exception $e) {
echo 'Une exception a été levée ! <br>';
echo 'Numéro de l\'erreur :'.$e->getCode().'<br>';
echo 'Message : '.$e->getMessage();
} finally {
// instruction a faire dans tous les cas
}
(+) Notions supplémentaires
pas vues en cours, Ă complĂ©terâŠ
Les espaces de nom ou namespace et les variables disponibles comme __NAMESPACE__, __CLASS__, __FUNCTION__.
La sérialisation, permet de transformer une valeur en une représentation linéaire sous forme de chaßne de caractÚres : serialize() et unserialize().
Le chargement automatique des classes avec spl_autoload_register('uneFonctionQuiInclude');.
Le clonage dâinstance avec la mĂ©thode magique __clone().