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

Visibilité
Là où PHP4 laissait tous vos attributs et méthodes de classe publiques, vous pouvez avec PHP5 limiter la visibilité de ceux-ci, à l'aide de trois mots-clés : public, protected et private.
public : équivalent du mot-clé var de PHP4, il indique que l'attribut peut être appelé et modifié par l'ensemble du programme, même depuis l'extérieur de la class. C'est le type par défaut.
protected : l'attribut de ne peut être utilisé que depuis sa propre classe ou ses classes héritées.
private : l'attribut ne peut être utilisé que depuis sa propre classe.

Tous ces types sont valables pour les méthodes, avec la syntaxe suivante :
public function renvoyerHeure() { }

Méthodes spéciales
Nous regroupons sous cette appellation les méthodes __tostring(), __construct() et son pendant __destruct().

__tostring() : permet de définir un texte à afficher lorsque le programme essaye d'afficher directement l'objet (echo $xavier, par exemple), ce qui est plus explicite que le Object renvoyé par défaut.

__construct() : avec PHP4, pour initialiser des attributs ou lancer des méthodes dès la création de l'objet, il fallait que la classe dispose d'un méthode éponyme. Avec PHP5, l'équivalent est de passer par ce constructeur. Cette méthode prend en arguement les attributs définis lors de l'instanciation de la classe.

__destruct() : inversement, le destructeur permet de terminer toute activité initiée par l'objet, quand celui-ci est détruit (par exemple avec unset()).

Référence

Hors les modifications de base que nous venons de voir, le mode de fonctionnement de l'Objet a aussi été revu, notamment le passage des objets. Avant de lire plus loin, il faut savoir manipuler les référence en PHP.

C'est une différence fondamentale entre la version 4 et la version 5 de PHP : PHP4 passe les objets par copie par défaut, et par référence avec l'opérateur &, tandis que PHP5 les passe par référence implicitement. Le passage par référence étant plus "naturel", beaucoup de scripts PHP l'utilisent... scripts qui ne marcheront donc probablement plus aussi bien avec PHP5.

Exemple : en PHP4, le code suivant

class Personne {
  var $nom;
  function Personne($nom) {
    $this-> = $nom;
    }
  function afficheNom() {
    echo "Nom=$this->nom";
    }
  }

$cedric = new Personne("Cédric");
$cedric2 = $cedric;
$cedric2->nom = "Sylvain";
$cedric->afficheNom();

$cedric2->afficheNom();

donne ceci :

Nom=Cédric
Nom=Sylvain

En clair : l'objet $cedric n'est que copié dans $cedric2, et chacun a désormais des caractéristiques propres. En ajoutant l'opérateur &

$cedric = new Personne("Cédric");
$cedric2 = &$cedric;
$cedric2->nom = "Sylvain";
$cedric->afficheNom();

$cedric2->afficheNom();

le résultat est différent :

Nom=Sylvain
Nom=Sylvain

  Forum

Réagissez dans les forums de JDN Développeurs

Nous travaillons donc, au travers de $cedric2, sur $cedric. Outre l'aspect "naturel" du passage par référence, il offre également de meilleures performances et consomme moins en mémoire. Il est donc devenu implicite avec PHP5 :

class Personne {
  public $nom;
  function __construct($nom) {
    $this-> = $nom;
    }
  function afficheNom() {
    echo "Nom=$this->nom";
    }
  }

$cedric = new Personne("Cédric");
$cedric2 = $cedric;
$cedric2->nom = "Sylvain";
$cedric->afficheNom();

$cedric2->afficheNom();

Ce ne sont là que les plus flagrantes modifications apportées au modèle objet de PHP5. Nous aurons l'occasion d'y revenir.

<< 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