Chaque définition de classe commence par le mot-clé
class, suivi par le nom de la classe, qui peut être
quelconque à condition que ce ne soit pas un
mot réservé en PHP.
Suivent une paire de parenthèses contenant la définition des membres et des
méthodes. Une pseudo-variable $this est disponible
lorsqu'une méthode est appelée depuis un contexte objet.
$this est une référence à l'objet appelé (habituellement,
l'objet auquelle la méthode appartient, mais ce peut être un autre objet si
la méthode est appelée de manière
statique depuis le
contexte d'un autre objet). Ce comportement est illustré dans l'exemple
suivant :
Exemple 19-1. La variable $this en programmation objet
<?php class A { function toto() { if (isset($this)) { echo '$this est définie ('; echo get_class($this); echo ")\n"; } else { echo "\$this n'est pas définie.\n"; } } }
class B { function titi() { A::toto(); } }
$a = new A(); $a->toto(); A::toto(); $b = new B(); $b->titi(); B::titi(); ?>
|
L'exemple ci-dessus va afficher : $this est définie (a)
$this n'est pas définie.
$this est définie (b)
$this n'est pas définie. |
|
Exemple 19-2. Définition simple d'une classe
<?php class SimpleClass { // déclaration d'un membre public $var = 'une valeur par défaut';
// déclaration de la méthode public function displayVar() { echo $this->var; } } ?>
|
|
La valeur par défaut doit être une expression, et non (par exemple),
une variable, un membre d'une classe ou un appel à une fonction.
Exemple 19-3. Valeur par défaut des membres d'une classe
<?php class SimpleClass { // Déclarations de membres non valides : public $var1 = 'hello '.'world'; public $var2 = <<<EOD Bonjour le monde ! EOD; public $var3 = 1+2; public $var4 = self::myStaticMethod(); public $var5 = $myVar;
// Déclarations de membres valides : public $var6 = myConstant; public $var7 = self::classConstant; public $var8 = array(true, false); } ?>
|
|
Note :
Il y a plusieurs fonctions utiles pour gérer les classes et les objets. Vous devriez
regarder du côté des fonctions Class/Object.
Pour créer une instance d'une classe, un nouvel objet doit être créé et
assigné Ã une variable. Un objet doit toujours être assigné lors de la
création d'un nouvel objet à moins qu'un l'objet ait un
constructeur
défini qui lance un exception
en cas d'erreur. Les classes doivent être définies avant l'instanciation (et, dans
certains cas, c'est impératif).
Exemple 19-4. Création d'une instance
<?php $instance = new SimpleClass(); ?>
|
|
Lors de l'assignation d'un instance déjà créée d'une classe à une variable,
la nouvelle variable accédera à la même instance de l'objet assigné.
Ce comportement est le même que lors du passage d'une instance à une fonction.
Une copie d'un objet déjà créé peut être effectuée par
clonage.
Exemple 19-5. Assignation d'un objet
<?php $assigned = $instance; $reference =& $instance;
$instance->var = '$assigned aura cette valeur';
$instance = null; // $instance et $reference deviennent null
var_dump($instance); var_dump($reference); var_dump($assigned); ?>
|
L'exemple ci-dessus va afficher : NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned aura cette valeur"
} |
|
Une classe peut hériter des méthodes et des membres d'une autre classe en
utilisant le mot clé extends dans la déclaration.
Il n'est pas possible d'étendre de multiples classes, une classe peut
uniquement hériter d'une seule classe de base.
Les méthodes et membres hérités peuvent être surchargés, Ã moins que
la classe parent ait défini une méthode comme
final. Pour surcharger, il suffit
de redéclarer la méthode avec le même nom
que celui défini dans la classe parent. Il est possible d'accéder à une
méthode ou un membre surchargé avec l'opérateur
parent::
Exemple 19-6. Héritage d'une classe simple
<?php // Rappel class SimpleClass { // déclaration d'un membre public $var = 'une valeur par défaut';
// déclaration de la méthode public function displayVar() { echo $this->var; } }
// extension de la classe class ExtendClass extends SimpleClass { // Redéfinition de la méthode parent function displayVar() { echo "Classe étendue\n"; parent::displayVar(); } }
$extended = new ExtendClass(); $extended->displayVar(); ?>
|
L'exemple ci-dessus va afficher : Classe étendue
une valeur par défaut |
|