Les objets dans Php 4 et 5 Utilisation de librairies de classe

Download Report

Transcript Les objets dans Php 4 et 5 Utilisation de librairies de classe

Introduction à la programmation II
Veronica Diego
Mercredi 13 avril 2005
Sujets qui seront abordés :
Introduction à la programmation orientée objet
Les classes en Php 4 et 5
Les objets dans Php 4 et 5
Utilisation de librairies de classe
Introduction à la programmation
orientée objet


Avant la version 4 de php, la programmation orientée objet n’était pas
proposée dans ce langage. Les programmeurs devaient donc se débrouiller
pour organiser des fonctions de la manière la plus propre possible en
essayant de les faire communiquer entre elles et de leurs faire partager des
données sans pour autant rendre le code incompréhensible. Par rapport à
C++ ou Java, Php faisait figure de langage « brouillon » avec lequel il était
très difficile de développer du code réutilisable et maintenable facilement.
La programmation orientée objet est né de ce genre de constat, d’abord en
1972 avec SmallTalk, mais surtout en 1983, lorsque Bjarn Stroustrup mit au
point une extension orientée objet du langage C : le C++. Depuis, les mettre
mots en matière de programmation sont réutilisabilité et facilité de
maintenance. Le code doit être organisé de façon clair et logique de
manière à atteindre ces objectifs. La programmation objet fournit un cadre
idéal à ce genre de réalisation, car elle permet une meilleure
conceptualisation, elle rend le principe de fonctionnement d’un programme
plus « humain » en permettant de s’abstraire totalement du code pour
s’atteler à la tâche principale : trouver la solution à un problème.
Les classes Php 4 et 5

Définition :
Une classe est un ensemble de variables et de fonctions.

Utilisation :
Une classe démarre toujours par le mot class suivit du nom de la
classe. Ensuite, nous écrivons entre accolade ({ }) les listes des
variables membres et celles des méthodes (l'ordre n'a aucune
importance), de la même façon que nous définirions des variables et
des fonctions.
Les classes
Exemple :
<?php
//php 5
class Animal {
// les trois caractéristiques d’un animal
public $type;
public $nom;
public $nourriture;
// l’action que l’animal peut effectuer
function emettreSon(){
print("Le $this->type pousse son cri !<br/>");
}
}
?>
Note : en Php 4, il faudrait mettre "var" à la place de "public"
Les objets dans php 4 et 5

Un objet regroupe toutes les informations et
actions disponibles pour une entité donnée. Les
informations, que nous appelons indifféremment
« attributs », « champs », « propriétés » ou
encore « membres », sont matérialisées par des
variables, tandis que les actions, que nous
appelons « méthodes », sont matérialisées par
des fonctions.
Les objets dans php 4 et 5

Pour comprendre la notion d’objet, prenons un
exemple. Imaginons que nous souhaitons
simuler un zoo et, plus précisément, le moment
où le gardien vient nourrir chaque animal. Nous
voulons, en outre, que chaque animal lance son
cri lorsque le gardien le nourrit (le lion va rugir, le
mouton bêler, etc.), nous voulons également
que le gardien donne le bon type de nourriture à
chaque animal.
Les objets dans php 4 et 5

Dans notre exemple, nous sommes en présence
de deux objets : un gardien et un animal.
Chacun des deux sera défini par ses
caractéristiques propres et par les actions qu’il
peut effectuer. Les caractéristiques du gardien
seront par exemple son nom et son prénom, et
celles de l’animal duquel il s’approche seront
son genre (koala, lion…), son nom et la
nourriture qu’il consomme.
Les objets dans php 4 et 5

Voici en Php 5 à quoi ressemblerait la classe correspondant à notre objet animal :
class Animal {
// les trois caractéristiques d’un animal
public $type;
public $nom;
public $nourriture;
// l’action que l’animal peut effectuer
function emettreSon(){
print("Le $this->type pousse son cri !<br/>");
}
}

Note : en Php 4, il faut remplacer "public" par "var"

Voir fichier zoo_1.php
Les objets dans php 4 et 5

Visibilité des variables (Php 5):
En effet, dans un objet, il est possible de spécifier qui pourra accéder à quelles variables.
Il existe trois niveaux de visibilité, symbolisés par trois mots clés :

public : indique que la variable est publique. Dans ce cas, la variable est
directement accessible de l'extérieur de la classe (zoo_2a.php)

private : indique que la variable est privée. Dans ce cas, la variable n'est
accessible qu'à l'intérieur de la classe. Si vous souhaitez y accéder de l'extérieur,
il faudra écrire une méthode qui la retourne. (zoo_2b.php)

protected : cette visibilité se situe entre privée et publique. Dans ce cas, la
variable ne sera pas accessible de l'extérieur de la classe, sauf pour les classes
filles qui hériteront de ce champ comme champ privé (nous reviendrons plus tard
sur la notion de classe fille, avec l'héritage). (zoo_2c.php)
Les objets dans php 4 et 5

Naissance des objets:

Pour utiliser une classe, il faut en créer une instance grâce à l'opérateur new (il s'agit
de "l'instanciation" d'une classe) :
<?php
$animal = new Animal();
?>

Un problème se pose : nous souhaitons indiquer quels sont le nom et la race de
l'animal et quelle nourriture il mange. Il est intéressant de pouvoir passer ces valeurs
en paramètre lors de la création de l'objet, autrement dit de pouvoir écrire :
<?php
$animal = new Animal("lion", "Tony", "viande");
?>
Les objets dans php 4 et 5

Constructeurs :
C'est justement ce que permettent les constructeurs. Un constructeur est
une méthode spéciale qui est appelée lors de l'instanciation de la classe
avec new. Ici nous touchons à une différence entre Php 4 et Php 5. En effet,
la fonction constructeur en Php 4 est définie par une fonction ayant le
même nom que la classe, tandis que en Php 5 le constructeur est affublé
d'un nom spécial : __construct. Nous allons donc pouvoir écrire cette
méthode de façon à ce qu'elle assigne les valeurs passées en paramètres
aux variables membres :
Les objets dans php 4 et 5
//php 4
class Animal {
// les trois caractéristiques d’un animal
var $type;
var $nom;
var $nourriture;
//le constructeur de notre classe
function Animal($type, $nom, $nourriture) {
$this->type = $type;
$this->nom = $nom;
$this->nourriture = $nourriture;
}
Les objets dans php 4 et 5
// l’action que l’animal peut effectuer
function emettreSon(){
print("Le $this->type pousse son cri !<br/>");
}
function getType() {
return $this->type;
}
function getNom() {
return $this->nom;
}
function getNourriture() {
return $this->nourriture;
}
}
Les objets dans php 4 et 5
//php5
class Gardien {
// les deux caractéristiques d’un gardien
public $nom;
public $prenom;
//le constructeur prends deux variables en paramètres
function __construct($nom,$prenom){
$this->nom = $nom;
$this->prenom = $prenom;
}
// l’action que le gardien peut effectuer
function nourrir($animal){
print("$this->nom $this->prenom donne de la $animal->nourriture" . " au $animal>type.<br/>");
$animal->emettreSon();
}
}

Voir fichier zoo_3.php
Les objets dans php 4 et 5

Destructeur:
Lorsque les objets ne sont plus utilisés, ils sont détruits. Php 5 s'occupe automatiquement de
compter le nombre de références sur les objets afin de savoir quand ils ne sont plus utilisés et
peuvent donc être effacés sans danger. Lors de cette destruction, il peut être nécessaire de
réaliser des opérations pour que la destruction de l'objet soit correctement effectuée. Pour cela,
une classe peut posséder un destructeur, qui comme le constructeur est une méthode portant un
nom spécial : __destruct. A la différence du constructeur, le destructeur ne peut accepter de
paramètres puisqu'il est appelé automatiquement par Php. Ajoutons un destructeur à notre classe
Animal afin d'afficher un message lors de sa destruction :
//le destructeur de notre classe
function __destruct() {
print("Un objet de type Animal ($this->type) a été détruit.<br/>");
}

Voir fichier zoo_4.php
Les objets dans php 4 et 5

L’héritage :
L'héritage permet de faire dériver une classe d'une autre afin qu'elle hérite de tous
ses champs de type public et protected ainsi que de toutes ses méthodes. Nous
pouvons ensuite en ajouter et aussi redéfinir ces méthodes afin de les spécialiser. Ici,
nous allons garder notre classe Animal et en faire hériter une classe Lion et une
classe Koala.
class Lion extends Animal {
function __construct($nom) {
$this->type = "lion";
$this->nourriture = "viande";
parent::__construct($nom);
}
function emettreSon() {
print("Grooooooooar!<br/>");
}
}
Les objets dans php 4 et 5
Note : l’opérateur « :: » permet d’accéder aux fonctions et
variables de la classe parente, « parent » aurait pu être
remplacé par le nom de la classe parente (Animal). Pour
accéder à une variable de classe qui n’est pas encore
instanciée, il faut utiliser l’opérateur « :: » avec une variable
« static » (ex: public static $type)
Voir fichier zoo_5.php
Utilisation de librairies de classes

Définition :
L'appellation de librairie vient d'un import abusif du mot "library" en
anglais. C'est un synonyme de bibliothèque. Une librairie est un
ensemble de méthodes, d'attributs et de classes réunis dans un
fichier directement utilisable à l'intérieur d'une application.
Une librairie à un Application Programmer’s Interface (API), c’est-àdire une liste de fonctions (ou procédures ou méthodes) et de
variables (ou classes) documentées et que vous pouvez utilisez.
Utilisation de librairies de classes

Utilisation :
Pour utiliser une librairie, il suffit d’installer sur son serveur
la librairie en question quelque part (sur le serveur), puis
dans votre page Php, il faut faire un « include » avec le
chemin jusqu’à la librairie.
Exemple : include('/path/to/set/here/adobd.inc.php');
Ensuite, il faut se référer à l'API pour connaître les
fonctions utilisable.
Tableau récapitulatif
Php 4
Php 5
Constructeur
Fonction ayant le même nom que la
classeEx : Class Etudiant { function
Etudiant()
Fonction __construct()
Ex : Class Etudiant {
function __construc()
Notion « destructeur » d’objets
N/A
Fonction __destruct()
Ex :function __destruct()
Notion de « clonage »
N/A
Fonction __clone()
Ex :function __clone()
Traitement des erreurs
Via des fonctions spécifiques
Ex :function division_par_zero ()
Possibilité d’utiliser les notions « try
{} » et « catch {}»
Niveaux de visibilités des variables
$GLOBAL
Public : variable accessible de
l'extérieur de la classe
Private : variable accessible
uniquement à l'intérieur de la classe
Protected : variable non accessible
depuis l'extérieur de la classe sauf
pour les classes filles.
Etc.
Références
Classes et librairies PHP :





Borde, N., Marhin, A. & Thevenet, M. (2004). Php 5. Micro Applications :
Paris.
Choi, W., Kent, A., Lea, C., Prasad, G. et Ullman, C. (2000). Maîtrisez Php
4. Wrox : Paris.
http://tecfa.unige.ch/guides/php/php5_fr/language.oop.html
http://tecfa.unige.ch/guides/php/php5_fr/language.oop5.html
http://tecfa.unige.ch/guides/tie/pdf/files/php-libs.pdf
TP


Prenez le fichier "tp.php" et ajoutez du code
permettant l'utilisation des fonctions définies
dans les classes.
Exemple :