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.3 Constructor : constructeur
Attention |
En
PHP
3 et
PHP
4, les constructeurs se comportent différemment.
La sémantique de
PHP
4 est fortement recommandée.
|
Le constructeur est la fonction qui est appelée
automatiquement par la classe lorsque vous créez
une nouvelle instance d'une classe a l'aide de l'opérateur
new
. La fonction constructeur a
le même nom que la classe.
En
PHP
3, une fonction devient le constructeur si elle porte le
même nom que la classe. En
PHP
4, une fonction devient un constructeur
si elle porte le même nom que la classe dans laquelle elle est définie.
La différence est subtile, mais cruciale.
Constructeur de classe |
<?php class Auto_Caddie extends Caddie { function Auto_Caddie () { $this->add_item ("10", 1); } } // Cette syntaxe est valable en PHP 3 et 4 ?>
|
L'exemple ci-dessus définit la classe
Auto_Caddie
qui
hérite de la classe Caddie et définit le constructeur
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. Pour pouvoir utiliser cette classe sans paramètre,
tous les paramètres du constructeurs devraient être optionnels,
en fournissant une valeur par défaut, comme ci-dessous.
Constructeur de classe à argument optionnel |
<?php // Cette syntaxe est valable en PHP 3 et 4 class Constructor_Cart extends Cart { function Constructor_Cart ($item = "10", $num = 1) { $this->add_item ($item, $num); } } // Création du caddie $default_cart = new Constructor_Cart; // Création d'un vrai caddie $different_cart = new Constructor_Cart ("20", 17); ?>
|
Attention |
En
PHP
3, les classes dérivées et les constructeurs ont un certains
nombre de limitations. Les exemples suivants doivent être lus avec
beaucoup d'attention pour comprendre ces limitations.
|
Constructeur de classe en PHP 4 |
<?php class A { function A() { echo "Je suis le constructeur de A.<br>\n"; } } class B extends A { function C() { "Je suis une fonction standard.<br>\n"; } } // Aucun constructeur n'est appelé en PHP 3!! $b = new B; ?>
|
En
PHP
3, aucun constructeur ne sera appelé dans l'exemple ci-dessus.
La règle en
PHP
3 est : 'Un constructeur est une méthode qui
a le même nom que la classe'. Le nom de la classe est B, et il n'y a pas
de fonction qui s'appelle B() dans la classe B. Rien ne se passe.
Ceci est corrigé en
PHP
4, avec l'introduction d'une nouvelle règle :
Si une classe n'a pas de constructeur, le constructeur de la classe de
basse est appelé, s'il existe. L'exemple ci-dessus affichera
'
Je suis le constructeur de A.<br>
' en
PHP
4.
Constructeur de classe en PHP 4 |
<?php class A { function A() { echo "Je suis le constructeur de A.<br>\n"; } function B() { echo "Je suis une fonction standard appelée B dans la classe A.<br>\n"; echo "Je ne suis pas le constructeur de A.<br>\n"; } }
class B extends A { function C() { echo "Je suis une fonction standard.<br>\n"; } } // Cette syntaxe va appeler B() comme constructeur. $b = new B; ?>
|
En
PHP
3, la fonction B() de la classe A va soudainement devenir le
constructeur de la classe B, bien qu'il n'ai pas été
prévu pour. La règle de
PHP
3 est 'Un constructeur est une
méthode qui a le même nom que la classe'.
PHP
3 ne se soucie
guère si la fonction est définie dans la classe B ou
si elle a été héritée.
Ceci est corrigé en
PHP
4, avec l'introduction d'une nouvelle
règle :
'Un constructeur est une méthode de même nom que la classe,
définie dans la classe elle-même'. Donc, en
PHP
4, la classe
B n'a pas de constructeur par elle-même, et le constructeur de la
classe A aura été appelé, affichant :
'
Je suis le constructeur de A.<br>
'.
Attention |
Ni
PHP
3 ni
PHP
4 n'appelle automatiquement le constructeur de
la classe supérieure depuis le constructeur de la classe
dérivée. Il est de votre responsabilité de propager
l'appel des constructeurs.
|
Note |
Il n'y a pas de destructeurs en
PHP
3 et
PHP
4. Vous pouvez utiliser
la fonction
register_shutdown_function
à la
place, pour simuler un destructeur.
|
Les destructeurs sont des fonctions qui sont appelées lorsqu'un
objet est détruit, soit avec la fonction
unset
soit par simple sortie d'une fonction (cas des variables locales).
Il n'y a pas de destructeurs en
PHP
.
|