J'ai du mal à comprendre ce qui DEVRAIT être fait dans le destructeur d'une classe PHP.
Je viens de C++. En c++, si j'ai ceci :
class A{
int n;
~A(){
}
}
class A2{
int* n;
~A2(){
delete n;
}
}
Le langage SAIT que si une instance de A est hors champ, son membre n doit être désalloué, car n n'appartient qu'à ce cas précis. MAIS si une instance de A2 sort de sa portée, il ne sait pas si la mémoire pointée par n doit être désallouée (il y a peut-être d'autres pointeurs qui pointent vers cette même mémoire). MAIS, si nous sommes sûrs de vouloir désallouer cette mémoire SI A2 L'instance sort du champ d'application, nous devons la "supprimer" MANUELLEMENT, car c'est notre intention.
Qu'en est-il de php ? Je suis un nouveau venu et j'ai vu plusieurs solutions :
class A3{
private $n;
public function __destruct(){
//Choice 1
unset($this->$n);
//Choice 2
delete $this->$n;
//Choice 3
}
}
Je ne suis pas sûr de la différence entre unset et delete, mais peu importe. On m'a dit (cf choix 3) que PHP désalloue "tout seul" la mémoire si on ne fait rien. Mais je ne comprends pas alors l'utilisation de delete ou unset dans le destructeur. Nous n'avons pas la notion de "pointeur" en PHP, donc si une instance de A3 sort de son champ d'application, il est naturel de désallouer n .
Alors, y a-t-il quelque chose qui DEVRAIT être fait dans un destructeur ? Si non, il n'y a jamais d'utilisation de delete ou unset dans le destructeur ?
EDIT : code réécrit basé sur le commentaire d'axiac