Chapitre 13. Classes et objets

Table des matières
Les classes : class
Références dans un constructeur

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 Caddie {
    var $items;  // Eléments de notre panier
    // 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;
        } else {
            return FALSE;
        }
    }
}
?>
     

L'exemple ci-dessus définit la classe Caddie 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.

Note : En PHP 4, seuls les initialiseurs constants pour les variables var sont autorisés. Utilisez les constructeurs pour les initialisations variables, ou utilisant des expressions.


<?php
/* Aucune de ces syntaxes ne fonctionnera en PHP 4 */
class Caddie {
    var $date_du_jour = date("d/m/Y");
    var $name = $firstname;
    var $owner = 'Fred ' . 'Jones';
}
/* Voici comment cela doit se faire désormais. */
class Caddie {
    var $date_du_jour;
    var $name;
    var $owner;
    function Caddie() {
        $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 Caddie;
 $cart->add_item("10", 1);
?>
    

L'instruction ci-dessus crée l'objet $cart de la class Caddie. La fonction add_idem() est appelée afin d'ajouter l'article numéro 10 dans la panier.

Une classe peut être une extension d'une autre classe. Les classes "extended" ou "derived" héritent de toutes les variables et de toutes les fonctions de la classe père plus toutes les définitions que vous rajoutez à cette classe. Cela se fait avec le mot clef "extends". L'héritage multiple n'est pas supporté.


<?php
class Caddie_nomme extends Caddie {
    var $owner;
    function set_owner ($name) {
        $this->owner = $name;
    }
}
?>
    

L'exemple ci-desssus définit la classe Caddie_nomme qui possède les même variables que la classe Caddie et la variable $owner en plus, ainsi que la fonction set_owner(). Vous créez un panier nominatif de la même manière que précédemment, et vous pouvez alors affecter un nom au panier ou en connaître le nom. Vous pouvez de toutes les façons utiliser les même fonctions que sur un panier classique.


<?php
$ncart = new Caddie_nomme;    // Création d'un panier nominatif
$ncart->set_owner ("kris"); // Affectation du nom du panier
print $ncart->owner;        // Affichage du nom du panier
$ncart->add_item ("10", 1); // (héritage des fonctions de la classe père)
?>
    

Dans les fonctions d'une classe, la variable $this est égale à l'objet de la classe. Vous pouvez utilisez la forme "$this->quelquechose" pour accéder aux fonctions ou aux variables de l'objet courant. Aussi bien depuis l'objet lui-même que de l'extérieur, vous n'avez pas besoin de $ pour accéder aux propriétés d'un objet.


<?php
$ncart->owner  = "chris"; // pas de '$'
$ncart->$owner = "chris";
// Ceci est invalide, car $ncart->$owner équivaut à $ncart->""
$myvar = 'owner';
$ncart->$myvar = "chris";
// Ceci est valide, car $ncart->$owner équivaut à $ncart->owner
    

Le constructeur est la fonction qui est appelée automatiquement par la classe lorsque vous créez une nouvelle instance d'une classe. La fonction constructeur a le même nom que la classe.


<?php
class Auto_Caddie extends Caddie {
    function Auto_Caddie () {
        $this->add_item ("10", 1);
    }
}
?>
    

L'exemple ci-dessus définit la classe Auto_Caddie qui hérite de la classe Caddie et définit le construteur de la classe. Ce dernier initialise le panier avec 1 article de type numéro 10 dès que l'instruction "new" est appelée. La fonction constructeur peut prendre ou non, des paramètres optionnels, ce qui la rend beaucoup plus pratique.


<?php
class Constructor_Caddie extends Caddie {
    function Constructor_Caddie ($item = "10", $num = 1) {
        $this->add_item ($item, $num);
    }
}
// Place dans le caddie toujours la même chose...
$default_cart   = new Constructor_Caddie;
// Place dans le caddie des objets différents, comme dans la
// réalité
$different_cart = new Constructor_Caddie ("20", 17);
?>
    

Attention

Pour les classes qui utilisent l'héritage, le constructeur de la classe père n'est pas automatiquement appelé lorsque le constructeur de la classe dérivée est appelé.