TUTORIEL PHP 
La programmation orientée Objet avec PHP5
Nombre de changements sont apparus dans ce domaine entre PHP4 et PHP5. Florilège. (03/09/2004)
1. Une classe typique | 2. Explications

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().

1. Une classe typique | 2. Explications
 
Xavier Borderie, JDN Développeurs
 
Accueil | Haut de page
 
 





Quand achetez-vous le plus en ligne ?
Du lundi au vendredi
Le samedi
Le dimanche

Tous les sondages