|
Table des matières
Chapitre 18. Les classes et les objets (PHP 4)Table des matières
"extends" : héritage Les classes : "class"Une classe est une collection de variables et de fonctions qui fonctionnent avec ces variables. Une classe est définie en utilisant la syntaxe suivante :
<?php class Panier { // Eléments de notre panier var $items; // Ajout de $num articles de type $artnr au panier function add_item ($artnr, $num) { $this->items[$artnr] += $num; } // Suppression de $num articles du type $artnr du panier function remove_item($artnr, $num) { if ($this->items[$artnr] > $num) { $this->items[$artnr] -= $num; return true; } elseif ($this->items[$artnr] == $num) { unset($this->items[$artnr]); return true; } else { return false; } } } ?> L’exemple ci-dessus définit la classe Panier qui est composée d’un tableau associatif contenant les articles du panier et de deux fonctions, une pour ajouter et une pour enlever des éléments au panier.
<?php class test { ?> <?php function test() { echo 'OK'; } } ?>Néanmoins, ce qui suit est autorisé : | Exemple 18-3. Changer de mode durant la définition d’une classe | <?php class test { function test() { ?> <?php print 'Ok'; } } ?>| Les notes suivantes ne sont valables que pour PHP 4.
<?php /* Aucune de ces syntaxes ne fonctionnera en PHP 4 */ class Panier { var $date_du_jour = date("d/m/Y"); var $name = $firstname; var $owner = 'Fred ' . 'Jones'; var $items = array("DVD", "Télé","Magnétoscope"); } /* Voici comment cela doit se faire désormais. */ class Panier { var $date_du_jour; var $name; var $owner; var $items; function Panier() { $this->date_du_jour = date("d/m/Y"); $this->name = $GLOBALS['firstname']; /* etc. */ } } ?> Les classes forment un type de variable. Pour créer une variable du type désiré, vous devez utiliser l’opérateur “new”.
<?php $cart = new Panier; $cart->add_item("10", 1); $another_cart = new Panier; $another_cart->add_item("0815", 3); ?> L’instruction ci-dessus crée l’objet “$cart” de la classe Panier. La fonction “add_idem()” est appelée afin d’ajouter l’article numéro 10 dans le panier. Trois articles numéro 0815 sont ajoutés au panier “$another_cart”. “$cart” et “$another_cart” disposent des fonctions “add_item()”, “remove_item()” et de la variable “items”. Ce sont des fonctions et variables distinctes. Vous pouvez vous représenter les objets comme des dossiers sur votre disque dur. Vous pouvez avoir deux fichiers “lisez-moi.txt” sur votre disque dur, tant qu’ils ne sont pas dans le même répertoire. De même que vous devez alors taper le chemin complet jusqu’au fichier, vous devez spécifier le nom complet de la méthode avant de l’employer : en termes PHP, le dossier racine est l’espace de nom global, et le séparateur de dossier est “→“. Par exemple, les noms “$cart→items” et “$another_cart→items” représentent deux variables distinctes. Notez que le nom de la variable est alors “$cart→items,” et non pas “$cart→$items” : il n’y a qu’un seul signe “$” dans un nom de variable.
<?php // correct, le signe $ est unique $cart->items = array("10" => 1); // incorrect, car $cart->$items devient $cart->"" $cart->$items = array("10" => 1); // correct, mais risque de ne pas se comporter comme prévu // $cart->$myvar devient $cart->items $myvar = 'items'; $cart->$myvar = array("10" => 1); ?> À l’intérieur d’une définition de classe, vous ne savez pas le nom de la variable à partir duquel l’objet sera accessible dans le script. On ne peut prévoir que l’objet créé sera affecté à la variable “$cart”, “$another_cart” ou quelque chose d’autres. Donc, vous ne pouvez pas utiliser la syntaxe “$cart→items.” Mais pour pouvoir accéder aux méthodes et membres d’un objet, vous pouvez utiliser la variable spéciale “$this,” qui peut s’interpréter comme “moi-même”, ou bien “l’objet courant”. Par exemple, “‘$this→items[$artnr] += $num;’” peut se lire comme ‘ajouter “$num” au compteur “$artnr” de mon propre tableau de compteur’ ou bien ‘ajouter “$num” au compteur “$artnr” du tableau de compteurs de l’objet courant’.
<?php class A { function foo() { if (isset($this)) { echo '$this est défini ('; echo get_class($this); echo ")\n"; } else { echo "\$this n'est pas défini.\n"; } } } class B { function bar() { A::foo(); } } $a = new A(); $a->foo(); A::foo(); $b = new B(); $b->bar(); B::bar(); ?>
Travail collaboratifContribuez, en ajjoutant des elements a cette page de manuel : Merci de votre aide |