|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||||
|
Membre habitué
![]() Inscription : septembre 2003 Messages : 598 ![]() |
Bonjour,
Je m'initie aux classes sous PHP5 et j'avoue que je patauge un peu. ![]() En ce moment je cherche à savoir comment passer un objet de classe A en paramètre à une méthode de classe B. J'y suis plus ou moins arrivé mais certains résultats me laisse perplexe. Voici mon code: Code :
Citation:
n'est pas lui qui est passé en paramètre mais sa copie serializée. Ce que je ne comprend pas c'est pourquoi il y a 2 appels au destructeur de A alors qu'il n'y a qu'une seule instanciation ? Dans le but de modifierl'objet lui-même j'ai modifié 2 lignes de code: Code :
Citation:
se fait au niveau de serialize et non plus à la fin du script. Ceci dit je ne comprend toujours pas ces 2 appels au destructeur. Quelqu'un pourrait-il m'éclairer ? Merci |
||||||
|
|
00
|
|
|
#2 | |
|
Membre habitué
![]() Inscription : septembre 2003 Messages : 598 ![]() |
Arf! Après plusieurs recherches je viens de m'apercevoir que je me suis emmêlé les pinceaux avec serialize et unserialize.
![]() En fait je n'ai pas besoin de ces fonctions pour ce que je veux faire. Il suffit simplement de passer l'objet en paramètre: et j'ai le résultat: Citation:
Note: en PHP5 les objets sont passés automatiquement par références, il n'est plus nécessaire de préfixer le paramètre avec & comme dans PHP4. Toutefois si quelqu'un pouvait m'expliquer pourquoi le destructeur est appelé 2 fois dans le code du 1er post je suis toujours intéressé. |
|
|
|
00
|
|
|
#3 |
|
Membre confirmé
![]() ![]() Inscription : juillet 2008 Messages : 145 ![]() |
Tu as deux objets de type A dans ton script initial, $o et $a. C'est pourquoi le destructeur est appele deux fois.
Le constructeur n'est pas appele pour $o car l'objet a ete cree avec unserialize, pas avec un constructeur. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : janvier 2007 Messages : 1 452 ![]() |
Car lorsque tu le désérialise tu instancies implicitement un nouvel objet, enfin PHP le fait pour toi.
Du coup à la fin du script, le GC va supprimer l'instance et appelé __destruct. Ce qu'il n'aurait pas fait si tu n'avais pas déserialisé l'objet. bye |
|
|
00
|
|
|
#5 | ||
|
Membre habitué
![]() Inscription : septembre 2003 Messages : 598 ![]() |
Merci pour vos réponses
Cela veut donc dire que $a est détruit la 1ere fois lors de sa serialization: puis reconstruit dans la méthode func: Code :
Enfin le destructeur est rappelé une 2eme fois à la fin du script. mais ce que je ne comprend pas c'est pourquoi l'appel en fin de script reste valide: puisque $a a été sérializé puis unserializé ailleurs dans une autre méthode, toutes invocation avec $a devrait provoquer une erreur non ? |
||
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() ![]() Inscription : juillet 2008 Messages : 145 ![]() |
L'objet n'est pas detruit lors de la serialisation. Tu peux toujours l'utiliser. C'est $o qui est detruit en premier, puisqu'il n'est plus accessible une fois que func termine.
|
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Inscription : septembre 2003 Messages : 598 ![]() |
Ok, c'est plus clair maintenant.
Merci |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com