4.9 Les classes et les objets
4 Référence
Manuel PHP
->Les classes : class . extends : héritage . Constructor : constructeur . Opérateur :: . parent . Sauvegarde d'objets - cas des sessions . Les fonctions magiques __sleep et __wakeup . Références dans un constructeur . Comparer des objets en PHP 4 . Comparer des objets en PHP 4
|
4.9.1 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 :
Les classes en PHP |
<?php class Caddie { // 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 <TT>TRUE</TT> ; } 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.
Attention |
Les notes suivantes ne sont valable que pour
PHP
4.
Le nom
stdClass
est utilisé en interne par
Zend et ne doit pas être utilisé. Vous ne pouvez pas nommer
une classe
stdClass
en
PHP
.
Les noms de fonctions
__sleep
et
__wakeup
sont magiques en
PHP
. Vous ne pouvez
pas utiliser ces noms de fonctions dans vos classes, à moins
que vous ne souhaitiez utiliser la magie qui y est associée.
PHP
se réserve l'usage de tous les noms de fonctions
commençants par
__
, pour sa propre magie.
Il est vivement recommandé de ne pas utiliser des noms de fonctions
commençants par
__
, à moins que vous ne
souhaitiez utiliser la magie qui y est associée.
|
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.
Initialisation de membres de classe |
<?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'; var $items = array("DVD", "Télé","Magnétoscope"); } /* Voici comment cela doit se faire désormais. */ class Caddie { var $date_du_jour; var $name; var $owner; var $items; 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.
Création d'un objet de classe |
<?php $cart = new Caddie; $cart->add_item("10", 1); $another_cart = new Caddie; $another_cart->add_item("0815", 3); ?>
|
L'instruction ci-dessus crée l'objet
$cart
de la classe
Caddie
.
La fonction
add_idem()
est appelée afin d'ajouter l'article
numéro 10 dans le panier. 3 articles numéro 0815 sont
ajoutés au caddie
$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.
Accès aux membres d'une classe |
<?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 $ncart->items $myvar = 'items'; $cart->$myvar = array("10" => 1); ?>
|
A 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
ou
$another_cart.
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'.
|