Avec l'arrivée de la version finale
de PHP 5.0.0 (et de sa première version corrigée,
la 5.0.1, un mois plus tard), les développeurs Web
peuvent enfin se pencher sur les différentes améliorations
et modifications apportées au langage sans craindre
de les voir disparaître d'ici la prochaine bêta.
C'est donc pour nous l'occasion de nous pencher sur ce PHP5
dont on a tant parlé depuis deux ans, et de vous présenter
ses avantages et la manière d'en profiter pour vos
futurs sites dynamiques.
Nous commençons donc cette série par la programmation
orientée Objet (POO) dans PHP5.
Origine
De l'aveux même de ses concepteurs, le modèle
objet de PHP3 (légèrement améliorée
dans PHP4) était plus une implémentation rapide
pour répondre à une demande immédiate,
qu'un modèle pensé et adapté à
la POO moderne. La gestion des objets de PHP4 était
suffisante mais pas idéale, et représente l'un
des grands défauts de cette version du langage.
C'est pourquoi l'un des premiers buts du projet menant à
PHP5 fut de revoir entièrement ce modèle objet
- tout en restant compatible avec les habitudes des développeurs,
et les innombrables scripts déjà créés.
En passant, le coeur du langage (le Zend Engine) profite d'une
mise à jour complète : les développeurs
disposent désormais d'un PHP plus complet, plus rapide
et mieux pensé que ses prédécesseurs...
Une classe typique
La POO avec PHP5 suppose que les programmeurs, habitués
à PHP4, acquièrent de nouvelles habitudes, notamment
en ce qui concerne la syntaxe du langage en la matière,
qui a été étendue. Pour se donner une
idée rapide, voici une classe typique, présentant
nombre de nouveautés apportées par PHP5 (indiquées
en gras) :
<?php
class Personne {
public $nom;
public $metier;
private $distance;
private $direction;
function __tostring() {
return "Cette classe permet de définir
et manipuler une personne.<br/>";
}
function __construct($nom, $metier, $distance=0,
$direction=0) {
$this->nom = $nom;
$this->metier = $metier;
$this->distance = $distance;
$this->direction = $direction;
}
function arreter() {
echo "$this->nom a arrêté toute activité
en cours.<br/>";
}
function marcher($pas) {
$this->distance += $pas;
echo "$this->nom avance de $pas pas.<br/>";
}
function tourne($degres) {
$this->direction += $degres;
echo "$this->nom a tourné de $degres
degré(s).<br/>";
}
function etat() {
echo "Le $this->metier $this->nom
a avancé de $this->distance pas depuis le début, il fait maintenant
face au degré $this->direction.<br/>";
}
}
$xavier = new Personne('Xavier Borderie', 'rédacteur', 0,
27);
$xavier->etat();
$xavier->marcher(50);
$xavier->tourne(-90);
$xavier->arreter(2);
$xavier->etat();
?>
 |
Forum |
|
Réagissez
dans les forums
de JDN Développeurs
|
Ce code affichera ceci :
Le rédacteur Xavier Borderie a avancé
de 0 pas depuis le début, il fait maintenant face au degré
27.
Xavier Borderie avance de 50 pas.
Xavier Borderie a tourné de -90 degré(s).
Xavier Borderie a arrêté toute activité en cours.
Le rédacteur Xavier Borderie a avancé de 50 pas depuis le
début, il fait maintenant face au degré -63.
On note donc pour différence de syntaxe les mots-clé
public et private,
ainsi que les fonctions spéciales __construct()
et __tostring().
|