Langage de programmation PHP
Chapitre 1. Introduction
Chapitre 2. Variables, opérateurs et expressions
Chapitre 3. Instructions de contrôle
Chapitre 4. Tableaux
Chapitre 5. Entrées/Sorties
Chapitre 6. Réutilisation de code
Chapitre 7. Lecture/écriture de fichiers
Chapitre 8. Fonctions diverses
Chapitre 9. Sérialisation
Chapitre 10. Fonctions orientées réseau
Chapitre 11. Base de données
Chapitre 12. Manipulations d’images
Chapitre 13. Programmation objet : PHP et les classes ( PHP 4/PHP 5)
Chapitre 14. Gestion des Exceptions (PHP 5)
Chapitre 15. Contrôle de sessions
Chapitre 16. PHP - Ajax
Chapitre 17. Webservices & SOAP
Chapitre 18. PHP en chiffre
Chapitre 19. Conclusion
Chapitre 20. Bibliographie
Page d'accueilTable des matièresNiveau supérieurPage précédenteBas de la pagePage suivante

Chapitre 13. Programmation objet : PHP et les classes ( PHP 4/PHP 5)


Avec PHP, on programme comme on veut…et même en objet si on le désire. Attention, PHP n’étant pas à la base un langage de programmation objet, il ne supporte pas tous les concepts inhérents à ce style/philosophie de programmation. Néanmoins, l’utilisation de classes bien définies permettra aux utilisateurs d’exploiter au mieux les fonctionnalités déjà développées.

13.1 Syntaxe de la programmation objet
La syntaxe est fortement inspirée du C++.

13.1.1 Allocation d’un objet
Tout se passe comme une allocation classique en C++, la seule différence est que l’on retrouve l’éternel $ propre au PHP et langage de scripts en général.

$monObjet = new maClasse(paramètres éventuels du constructeur) ;

13.1.2 Accès aux méthodes et attributs

$monObjet->nomMethode(…) ;
$monObjet->nomAttribut = … ou $mavar = $monObjet->nomAttribut

On fera attention à mettre le $ sur le nom de l’objet et pas sur le nom de la méthode/attribut. Lorsqu’on désirera affecter un attribut relatif à soi-même (le this), on procédera de la même manière : $this->… PHP n’ayant pas de déclaration préalable des variables nécessaires, l’oubli de $this-> ne provoquera pas d’erreur, une nouvelle variable sera ainsi définie et utilisée, mais ce ne sera pas l’attribut de la classe.

13.1.3 Définition d’une méthode

function maMethode([$param1, $param2) {
return $… // permet à la méthode de faire un retour de “ ce que l’on veut ”
}

13.1.4 Déclaration d’une classe

class MaClasse {
$attribut1 ;
$attribut2 ;

function maMethode1( ) {

}
function maMethode2($param1, $param2= “ je suis une chaîne ”) { // paramètre par défaut…

}
} // fin de la déclaration de la classe.

Par défaut, tout accès à un membre (attribut/méthode) est public. Néanmoins, il est tout à fait possible d'y préciser un accès de type private ou protected en plaçant le mot clé devant la déclaration de l'attribut et/ou de la méthode.
Communément, les fichier de déclaration comporteront l’extension .inc (pour include). Afin de ne pas surcharger le code, et dans un but de réutilisation maximum, nous inclurons le code via la commande include(“ maclasse.inc ”) dans le fichier PHP exploitant cette dernière. On procédera ainsi :

< ?php
include (“ maClasse.inc ”) ;
?>

<HTML> <HEAD> …</HEAD> <BODY>
< ?php
$monObjet = new maClasse(…) ;
?>
</BODY></HTML>

13.1.5 Autres concepts

L'héritage et oui, et c’est souhaitable, il est également possible de profiter des avantages de l’héritage, mais contrairement au C++ ou SmallTalk, PHP utilise la philosophie chère à Java en n'autorisant quel'héritage simple (pas d'héritage multiple) :

class maClasseHéritée extends maClasse {

parent::methode1() // permet d'appeler la méthode ''originale'' de la classe mère
}

La surdéfinition d'attributs et de méthodes est également possible à la condition que le membre concerné n'ai pas été déclaré final ( final mamethode (...) ),

Afin de palier en partie aux problèmes liés à l'inexistence d'héritage multiple, PHP permet de définier des interfaces. Une Interface permet de spécifier le squelette d'une classe qui sera implémentée dans les classes implémentant l'interface :

interface AffichezMoi {
function afficher();
}

class maClasseAMoi implements AffichezMoi {
function afficher() {
//implémentation de la méthode de l'interface
}
...// Attention, il ne faut pas implémenter uniquement les méthodes de l'interaface.
}

Nous avons ici une classe qui implémente (ce qui n'est pas exclusif avec l'héritage) une classe dont elle contiendra le code. Ceci permet de créer des modèles de classes en délocalisant l'implémentation à la classe qui la nécessite afin que l'implémentation « colle » au mieux aux besoins.

Lors de l'utilisation de classes, il est à noter une fonction bien pratique (également présente en Java par exemple) qui permet de connaître la classe d'un objet et donc de réaliser des traitement particuliers :

if ($o1 instanceof ClasseA)
...
else
...

Également présent la possibilité de créer une copie d'un objet à l'aide du mot clé clone :

$copie = clone $objet;

Enfin, il est également possible d'utiliser la réflexivité sur les classes afin d'interroger les classes et objets pour en connaître leur structure et contenu. Cette API complète ne sera pas décrite, on pourra consulter labibliographie pour plus d'informations.

Page d'accueilTable des matièresNiveau supérieurPage précédenteHaut de la pagePage suivante