Forum Clubic

PHP5 destructeur - comment tuer l'objet fils avant le père

Bonjour,

j’ai une question bête qui me fatigue …
il s’agit de l’utilisation des classes en PHP5.

voila,
j’ai une classe mère “TOTO” et une classe fille “TITI” hérité de “TOTO”
pour l’instantiation, pas de problème …
maintenant pour la destruction de mon objet, j’aimerai que “TITI” meurt avant “TOTO”. Or c’est l’inverse qui se produit, “TOTO” meurt avant “TITI” à la fin du script PHP

comment le détruire volontairement, sans attendre la fin du script.

d’avance merci !

Genre tu as :

<?php
class Titi extends Toto {
  function __destruct() {
    echo 'Titi';
  }
}
class Toto {
  function __destruct() {
    echo 'Toto';
  }
}
?>

Et ça t’affiche Toto puis Titi?

Alors si c’est ça le problème sache que tu n’y peux rien, sauf à faire de Toto une classe fille de Titi, et de Titi une classe mère de Toto (ie: Toto extends Titi).

Bref, tout cela vient de la mémoire : typiquement, en C++, en Java et surement en php, lorsqu’une classe A hérite d’une autre classe B, tu as (en mémoire) tous les champs de la classe A dans la classe B, et le compilateur bien gentil te dit niet si c’est privé.

En gros?

class A {
  private int x;
}

class B extends A {
  private int x;
}

Si tu prend l’opérateur sizeof() du C/C++, celui ci donne pour un type donné la taille en mémoire :

sizeof(int) = 4
sizeof(A) = 4 (modulo la vtable, etc)
sizeof(B) = 8 (modulo la vtable, etc)

Pourquoi B qui ne contient qu’un int a une taille de 8 au lieu de 4 ? Simple : parce que A est englobé dedans.

Pour continuer dessus, la destruction se fait ainsi parce que pour créer un B, tu crée d’abord un A, et on détruit dans l’ordre inverse de la construction (new B() -> new A() -> destroy A; destroy B).

Voilà.

Ok, c’est effectivement ça mon problème !
merci pour ta réponse en tout ka …

je v revoir ma hierarchie de classe.