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éfinit.
La différence est subtile, mais cruciale.
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. 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.
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.
|
En PHP 3, aucun constructeur ne sera appelé dans l'exemple ci-dessus.
La règle en PHP 3 est : 'Un constructeur est une fonction qui a le même nom
que la classe'. Le nom de la classe est B, et il n'y a pas de fonctions 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.
En PHP 3, la fonction B() de la classe A va soudaiement 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
fonction 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 classe de même nom, définit 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.