Chapitre 14. Les classes et les objets

Table des matières
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

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 .

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 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 utilser des noms de fonctions commençants par __ , à moins que vous ne souhaitiez utiliser la magie qui y est associée .

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'

 
;

 
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 .

 
?php

 
$cart

 
=

 
new

 
Caddie

 
;

 
$cart

 
-

 
add_item("10"

 
,

 
1)

 
;

 
$another_cart

 
=

 
new

 
Cart

 
;

 
$another_cart

 
-

 
add_item("0815"

 
,

 
3)

 
;

 
?



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 le panier . 3 articles numéro 0815 sont ajoutés au cart $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

 
,

 
$

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