6.Le langage PHP
6.8.Programmation orientée objet
6.8.2.Utilisation d'une classe
6.8.2.1.Introduction
Vous aurez certainement rapidement besoin d'implémenter vos propres classes et interface comme nous le verrons dans le chapitre suivant, mais dans l'immédiat peut-être n'avez-vous besoin que d'utiliser des classes déjà existantes. C'est pourquoi nous vous proposons ici, d'apprendre à instancier un objet, à appeler une méthode (qu'elle soit statique ou pas) et enfin, nous verrons quelques fonctions et mots clés qui peuvent s'avérer utiles dans la manipulation des classes.
En bref:
- $objet = new MaClasseAMoi($param); pour instancier un objet
- $objet->maMethode($param); pour appeler une méthode
- MaClasseAMoi::maMethode($param); (ou encore $objet::maMethode($param) depuis PHP 5.3.0) pour appeler une méthode statique
- $objet->maVariable; pour accéder à une variable membre
- MaClasseAMoi::$maVariable; pour accéder à une variable membre statique (voire $objet::$maVariable depuis PHP 5.3.0)
- MaClasseAMoi::MA_CONSTANTE; pour accéder à une constante de classe
- get_class($objet); pour retourner le nom de classe dont $objet est une instance
- $object instanceof NomDeClasseOuInterface; pour tester si $objet est une instance de la classe ou de l'interface ou d'une classe fille
|
6.8.2.2.Instanciation d'une classe
L'instanciation (i.e. la création) d'un objet se fait par le mot clé
new suivi du nom de la classe (en passant ou non des paramètres tout dépend de l'interface du constructeur) selon le modèle suivant.
<?php
$objet = new NomObjet($param);
6.8.2.3.Appel d'une méthode
L'appel d'une méthode (non statique) se fait via le délimiteur composé d'un tiret et d'un signe supérieur '->'.
<?php
$objet->nomMethode($param);
L'appel d'une méthode statique se fait via le délimiteur composé de deux deux-points '::'.
<?php
NomObjet::nomMethodeStatique($param);
6.8.2.4.Accès à une variable membre ou une constante de classe
Il est possible d'accéder à une variable membre (dans la limite de la visibilité de celle-ci) selon le même principe que pour les appels des méthodes c'est à dire avec '->'.
Pour les variables statiques et les constantes de classe c'est l'opérateur '
::' qu'il convient d'utiliser (comme pour les méthodes statiques) en général après avoir indiqué le nom de la classe (mais depuis PHP 5.3.0, il est aussi possible de préciser un objet à la place du nom de la classe) et avant le nom de la variable que l'on noubliera pas de faire précéder du signe '$'
<?php
$objet->maVariable;
MaClasseAMoi::$maVariableStatique;
MaClasseAMoi::MA_CONSTANTE;
// Depuis 5.3.0 les lignes suivantes sont également valides
$objet::$maVariableStatique;
$objet::MA_CONSTANTE;
6.8.2.5.Quelques fonctions associées aux objets
6.8.2.5.1.get_class()
La fonction
get_class() retourne, sous forme d'une chaîne de caractères, le nom de la classe dont l'objet passé en paramètre est l'instanciation.
<?php
$objet = new MaClasse();
echo get_class($objet); // retournera 'MaClasse';
6.8.2.5.2.instanceof
Mais
get_class() ne permet pas de déterminer si un objet est une instanciation d'un objet héritant d'une autre classe ou implémentant telle ou telle interface. Pour cela, vous disposez du mot clé
instanceof à placer après l'objet et suivi du nom de la classe ou interface.
<?php
$objet = new MaClasse();
if ($objet instanceof MaClasse) echo 'Oui, c\'est bien un objet MaClasse';
if ($objet instanceof MaClasseMere) echo 'Oui, c\'est bien un objet héritant de MaClasseMere';
if ($objet instanceof MonInterface) echo 'Oui, c\'est bien un objet implementant MonInterface';
6.8.2.6.Conclusion
Vous êtes maintenant en mesure de mettre en pratique (de façon basique) l'utilisation de objets avec les classes natives de PHP comme DateTime.
<?php
// Instanciation d'un objet DateTime initialisé avec une date
$objet = new DateTime('2020-12-31');
// Appel de la méthode format() pour un affichage au format "jour mois année"
echo $objet->format('d/m/Y')."\n"; // Retournera 31/12/2020
// Appel de la méthode statique createFromFormat()
$objet2 = DateTime::createFromFormat('d/m/Y', '31/12/2020');
if ($objet2 instanceof DateTime) {
echo '$objet2 est bien un objet DateTime'."\n";
}
if ($objet2 instanceof DateTimeInterface) {
echo '$objet2 qui est un objet '.get_class($objet2).
' est une implémentation de DateTimeInterface (depuis PHP 5.5.0)'."\n";
}
// Appel de la méthode format() pour un affichage au format
// défini par la constante de classe DateTime::ISO8601
echo $objet2->format(DateTime::ISO8601)."\n";