I only just noticed this page is specifically referring to PHP 4, so I'd suggest changing
"There are no destructors in PHP."
to
"There are no destructors in PHP 4. Support for destructors was added in PHP 5."
Le constructeur est la fonction qui est appelée automatiquement par la classe lorsque vous créez une nouvelle instance d'une classe à l'aide de l'opérateur new. La fonction constructeur a le même nom que la classe. Une fonction devient le constructeur si elle porte le même nom que la classe. Si une classe n'a pas de constructeur, le constructeur de la classe de base sera appelé, s'il existe.
<?php
class Auto_Panier extends Panier {
function Auto_Panier () {
$this->add_item ("10", 1);
}
}
?>
L'exemple ci-dessus définit la classe Auto_Panier qui hérite de la classe Panier 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.
<?php
class Constructor_Cart extends Cart {
function Constructor_Cart($item = "10", $num = 1) {
$this->add_item ($item, $num);
}
}
// Création du Panier
$default_cart = new Constructor_Cart;
// Création d'un vrai Panier
$different_cart = new Constructor_Cart("20", 17);
?>
Vous pouvez également utiliser l'opérateur @ pour empêcher les erreurs survenant dans le constructeur de s'afficher, e.g. @new.
<?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
{
}
// Cette syntaxe va appeler B() comme constructeur.
$b = new B;
?>
La fonction B() de la classe A va soudainement devenir le constructeur de la classe B, bien qu'il n'ait pas été prévu pour. PHP 4 ne se soucie guère si la fonction est définie dans la classe B ou si elle a été héritée.
PHP n'appelle pas 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.
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. Vous devez utiliser la fonction register_shutdown_function() à la place pour simuler la plupart des effets des destructeurs.
I only just noticed this page is specifically referring to PHP 4, so I'd suggest changing
"There are no destructors in PHP."
to
"There are no destructors in PHP 4. Support for destructors was added in PHP 5."
"There are no destructors in PHP. You may use register_shutdown_function() instead to simulate most effects of destructors. "
I thought this was a particularly strange statement, seeing as that I use __construct() en __destruct() the whole time. And surely, from http://php.net/manual/en/language.oop5.decon.php we can read this:
"void __destruct ( void )
PHP 5 introduces a destructor concept similar to that of other object-oriented languages, such as C++. The destructor method will be called as soon as there are no other references to a particular object, or in any order during the shutdown sequence. "
And even:
"The destructor will be called even if script execution is stopped using exit(). Calling exit() in a destructor will prevent the remaining shutdown routines from executing."
So PHP definitely supports destructors.