Aujourd’hui j’ai fini le cours de PHP 5 sur Developpez.com consacré au PHP objet. Il y a encore quelques trucs que je détaillerai dans les billets des prochains jours, mais en somme, mis à part mon problème avec @@self@@ et @@parent@@, je pense avoir compris l’esentiel. Il se trouve que je suis actuellement en stage et que je vais avoir l’occasion de me confronter au framework maison de la boîte où je travaille, et, ô miracle, c’est un framework objet ! Il a l’air bigrement complet et bien fichu, mais aussi peut-être un petit peu compliqué pour moi… ça va être l’occasion de voir ce que j’ai compris ! Mais bref… parlons un peu de l’instanciation d’une class et clônage d’objets. !!!Instanciation d’une class et destruction d’objets Lorsqu’on instancie une class avec le mot clé @@new@@, on créé une référence de cette instanciation. Et si on fait une copie de cet objet avec le symbole =, on créé une nouvelle référence vers cette instanciation. Or pour supprimer une instanciation d’une class, avec la fonction unset(), il faut que toutes les références de cette class soient supprimées. Pour bien comprendre, reprenons l’exemple de Développez.com. Pour cela, il faut savoir que la méthode magique @@__destruct()@@ est déclenchée lorsqu’on supprime une instance d’une class. /// /// Cet exemple affichera : > Allons soldats, tuons monBlog !%%% > Puisqu’il résiste, éliminons donc son frère !%%% > Je me meurs ! !!!Et pourquoi ne pas clôner Au lieu d’utiliser le symbôle =, on peut aussi utiliser le mot clé @@clone@@ pour signifier que l’on fait une nouvelle instanciation de la class. La référence qui est créée vers cette instanciation n’a donc plus rien à voir avec la première. Le résultat du code suivant devient alors évident : /// /// Cet exemple affichera : > Allons soldats, tuons monBlog !%%% > Je me meurs !%%% > Continuons sur notre lancée, éliminons donc son frère !%%% > Je me meurs ! !!!Résumons et clarifions * __… = …__ : créé une nouvelle référence vers l’objet -> Si on modifie l’objet les deux instances sont donc modifiées * __… = clone …__ : créé un nouvel objet -> Si on modifie l’un des deux objets, cela ne modifie pas l’autre Et un dernier petit exemple pour se fixer les idées : /// nom = ‘Bnbox !’; echo ‘Valeur de $monBlog initialisée
‘; echo ‘$monBlog : ‘.$monBlog->nom.’
‘; $monAutreBlog = $monBlog; $tonBlog = clone $monBlog; echo ‘$monAutreBlog : ‘.$monAutreBlog->nom.’
‘; echo ‘$tonBlog : ‘.$tonBlog->nom.’
‘; echo ‘
Valeur de $monBlog modifiée
‘; $monBlog->nom = ’30 minutes par jour’; echo ‘$monBlog : ‘.$monBlog->nom.’
‘; echo ‘$monAutreBlog : ‘.$monAutreBlog->nom.’
‘; echo ‘$tonBlog : ‘.$tonBlog->nom.’
‘; echo ‘
Valeur de $monAutreBlog modifiée
‘; $monAutreBlog->nom = ‘Bible Ipsum’; echo ‘$monBlog : ‘.$monBlog->nom.’
‘; echo ‘$monAutreBlog : ‘.$monAutreBlog->nom.’
‘; echo ‘$tonBlog : ‘.$tonBlog->nom.’
‘; echo ‘
Valeur de $tonBlog modifiée
‘; $tonBlog->nom = ‘Flamb\’clair’; echo ‘$monBlog : ‘.$monBlog->nom.’
‘; echo ‘$monAutreBlog : ‘.$monAutreBlog->nom.’
‘; echo ‘$tonBlog : ‘.$tonBlog->nom.’
‘; ?> /// Ce qui affichera : > Valeur de $monBlog initialisée%%% > $monBlog : Bnbox !%%% > $monAutreBlog : Bnbox !%%% > $tonBlog : Bnbox !%%% > %%% > Valeur de $monBlog modifiée%%% > $monBlog : 30 minutes par jour%%% > $monAutreBlog : 30 minutes par jour%%% > $tonBlog : Bnbox !%%% > %%% > Valeur de $monAutreBlog modifiée%%% > $monBlog : Bible Ipsum%%% > $monAutreBlog : Bible Ipsum%%% > $tonBlog : Bnbox !%%% > %%% > Valeur de $tonBlog modifiée%%% > $monBlog : Bible Ipsum%%% > $monAutreBlog : Bible Ipsum%%% > $tonBlog : Flamb’clair%%% Bref le clônage n’est vraiment pas qu’une question de référence
Catégories
- Apache (6)
- Avent (14)
- C / C++ (5)
- CMS (16)
- Geekeries (41)
- HTML et CSS (6)
- Informations (12)
- Java (26)
- Javascript (8)
- L'anecdote du week-end (4)
- PHP (30)
- PHP objet (20)
- Projets (4)
- Référencement (4)
- SQL (9)
- XML (3)
- XMPP (4)
Tags
30 minutes Android Anecdote Ant Apache attribut C class CMS constructeur CSS date design Dotclear Eclipse erreur Expression Google Java Javascript Joomla jQuery Ligne de commande Linux Maven MySQL méthode PgSQL PHP POO Projet public regex Référencement SEO Shell SQL ssh tutoriel Url Rewriting Wallpaper Windows Wordpress XHTML XML