IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Persistance des objets


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 257
    Par défaut Persistance des objets
    Bonjour!

    Ayant développé en Java et utilisant la POO, je souhaite utiliser la puissance de la POO en php.

    Mais je cherche à comprendre comment gérer la persistance des objets en php.

    Après des recherches sur le net, j'ai vu que l'on pouvait stocker les données dans des variables de sessions, un fichier xml, ou un BDD.

    Mais cette solution ne fait elle pas que stocker les données de l'objet (propriétés), et non l'objet lui même?

    Par exemple, si j'ai une classe Joueur avec différentes propriétéss (score, pseudo etc.) que j'instancie en Joueur1. Je peux effectivement stocker ces données dans des variables de session.

    Mais quand je vais aller sur une autre page, je vais devoir instancier un nouvel objet, et attribuer les valeurs qui sont en variable de session. C'est bien ça?

    Si c'est le cas, on doit ré-instancier tous les objets à chaque page?

    Merci pour votre aide.

    A+

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Non, tu peux directement mettre en Session tes objets et les récupérer tel quel a la sortie. A l'exception près des connexions a la base de données ou autre service. Tu peux te servir de la method magic __wakeup pour récuperer tes connexions.

    http://uk.php.net/manual/fr/language...p5.magic.sleep

  3. #3
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 257
    Par défaut
    Salut et merci pour ta réponse!

    Pour prendre un exemple concret, j'utilise une classe avec différentes méthodes me permettant de centraliser les accès à la base de données.

    En php5, je crois qu'il est possible de définir cette classe comme abstraite, comme en java, et de pouvoir l'utiliser de partout sans l'instancier (un simple include).

    En php4, y a t-il un équivalent ou suis-obligé d'instancier la classe, par exemple, lors de la connexion au back office et de la passer en variable de session?

    A l'heure actuelle, j'instancie la classe à chaque utilisation, ce qui n'est pas top pour une classe dite statique.

    Merci par avance

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Oui les classes peuvent être abstraite en PHP5.
    Tu utilises PHP4 ou PHP5 ?

    A l'heure actuelle, j'instancie la classe à chaque utilisation, ce qui n'est pas top pour une classe dite statique.
    c'est a dire ?

  5. #5
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 257
    Par défaut
    Merci pour ta réponse.

    En effet, j'avais lu qu'on pouvait faire des classes abstraites en php5, ce qui correspond bien a mon besoin : une classe avec les accès mysql qui centralise simplement des méthodes, donc pas besoin d'avoir d'instances multiples.

    Par contre pour un projet actuel, je suis en php4. Donc il me semble qu'il n'est pas possible d'avoir une classe abstraite ou statique, afin de ne pas avoir à l'instancier, je me trompe?

    Si c'est le cas, quel alternative j'ai? Car comme je l'ai dis, pour l'instant la classe est instancier dans chaque page.

    Merci

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Dans tous les cas, ta classe devra réinitialiser la connexion à la BDD, et cela ne peut être fait par une classe statique sans passer par un appel de méthode alors que tu peux le faire au niveau du constructeur lors de l'instanciation.

    L'idéal dans ton cas serait d'utiliser un singleton dont tu peux récupérer l'instance à n'importe quel niveau de ton script.

    [Edit] PHP4 ne permet pas vraiment d'être carré sur un pattern singleton mais tu peux toujours "simuler" le système.

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Ce n'est pas bien grave qu'elle soit instancier dans chaque page dans la mesure ou tu es dans un mode déconnecté de plus tu ne pourras pas partager cet objet dans toute ton application. La persistence n'est pas son point fort de PHP4.

    A mon avis le plus important c'est d'avoir une seule connexion a la base de données par page (Singleton).

  8. #8
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 257
    Par défaut
    Dans tous les cas, ta classe devra réinitialiser la connexion à la BDD, et cela ne peut être fait par une classe statique sans passer par un appel de méthode alors que tu peux le faire au niveau du constructeur lors de l'instanciation.
    En fait, je n'ai pas a me préoccuper de la connection, car elle est faite avant l'appel de la classe.
    Donc je pense qu'une classe statique marcherait non? Mais je ne peux pas utiliser de classe static en php4 c'est ca?

    Ce n'est pas bien grave qu'elle soit instancier dans chaque page dans la mesure ou tu es dans un mode déconnecté de plus tu ne pourras pas partager cet objet dans toute ton application. La persistence n'est pas son point fort de PHP4.
    Pourquoi je ne pourrai pas la partager dans toute l'appli? Si c'était une classe statique, je pourrais faire un appel directement de la méthode avec un simple include de la classe avant non?

    Merci pour votre aide.

  9. #9
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Tu peux parfaitement utiliser une classe statique en PHP4, y'a pas de soucis de ce côté là. Le seul truc c'est que tu ne peux pas en interdire l'instanciation mais si tu es rigoureux dans ton dev tout ira bien.

  10. #10
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 257
    Par défaut
    Merci pour ta réponse

    Donc y a rien de spécial a mettre dans ma classe pour quelle soit statique c'est ca?

    Juste j'accede directement aux methodes en faisant : maClasse::maMethode();

    C'est bien ça?

    Merci

  11. #11
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    PHP4 est loin...

    Va falloir tester. Peut-être qu'il faudra déclarer les attributs static, je me rappelle plus.

    Ce qui est sûr c'est qu'en PHP5 strict, il faudrait déclarer les attributs static, et les méthodes aussi.

    Sinon oui c'est bien maClasse::maMethode();

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Par défaut
    Pourquoi je ne pourrai pas la partager dans toute l'appli? Si c'était une classe statique, je pourrais faire un appel directement de la méthode avec un simple include de la classe avant non?
    Oui, bien sur mais je pensais plus aux variables d'application comme elle n'existe pas en PHP tu devras instancier sur chaque page ton objet.

    Va falloir tester. Peut-être qu'il faudra déclarer les attributs static, je me rappelle plus.
    De mémoire il n'y a pas d'attribut static en PHP4

    Au fait pourquoi ce projet est toujours en PHP4?

  13. #13
    Membre éclairé
    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    257
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 257
    Par défaut
    Donc en php4, "static" n'existe pas pour définir les méthodes, mais il suffit de ne pas instancier la classe est d'y acceder par maClasse::maMethode();

    Donc, j'ai juste à faire un include de ma classe sur les pages concerné et pas besoin d'instancier et pas besoin de passer d'objets en session du coup.

    Pourquoi le projet est en php4? C'est la reprise d'un projet qui a été commencé en php4... Mais avec tous les avantages de php5 niveau objet, faudra voir si on le passe en php5...

    En tout cas merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Persistance des objets
    Par princenourdino dans le forum Débuter
    Réponses: 1
    Dernier message: 08/11/2010, 12h40
  2. problème avec la persistance des objets
    Par gentil dans le forum Hibernate
    Réponses: 15
    Dernier message: 04/04/2007, 12h44
  3. Persister des objets etendus
    Par Alec6 dans le forum Hibernate
    Réponses: 3
    Dernier message: 20/03/2007, 01h01
  4. Persistance des objets : comment ?
    Par SteelBox dans le forum C++
    Réponses: 1
    Dernier message: 28/11/2005, 22h47
  5. [Struts][DynaActionForm et persistance des objets]
    Par jcos dans le forum Struts 1
    Réponses: 4
    Dernier message: 22/12/2004, 10h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo