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 :

[POO] question sur le passage d'objets volumineux d'une page à l'autre, en php5


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut [POO] question sur le passage d'objets volumineux d'une page à l'autre, en php5
    Bonjour,

    Je débute en POO, et je voudrais passer des objets d'une page à une autre. J'ai cru comprendre qu'il faudrait que j'utilise serialize pour se faire. Mais ma question est de savoir quelles sont les limites de ce procédé:

    Par exemple, pour un livre d'or, est-il envisageable de passer l'ensemble des messages écrits via serialize, afin de ne pas avoir à interroger la base de données à chaque appel de la page par l'utilisateur (en cas de nouveau message, ou simplement pour le passage d'une page de commentaires à une autre)? Ou faut-il à chaque fois que je me connecte à la BDD pour y lire à nouveau tout son contenu? En supposant qu'il n'y aie que 100 messages, cela pourrait-il passer, ou le contenu de cet objet sera-t'il trop important?

    Même question par exemple pour un panier. Le volume de données étant plus petit (le tableau contiendra une quantité et un identifiant), suis-je assuré que cela passera sans soucis d'une page à une autre? Ou faut-il mieux passer ces données via une variable de session afin d'être certain de tout récupérer, comme je le faisais sous PHP4?

    Bref, est-il possible et si oui quelles sont les différentes possibilités pour passer des données d'une page à l'autre de façon fiable?

    D'avance merci

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Pourquoi penses tu que ton SGBD vas se vautrer ? Je vois régulièrement ce genre de craintes dans les posts. Je ne les comprend pas. Un SGBD est fait pour cela, lire des données et les transmettre. J'irai plus loin en disant que ce sont des logiciels créés pour gérer les problématiques de connections simultanées.

    Pour en revenir aux coeur de la question, tu ne devrais sérializer que de petits objets. Car la serialisation est un procédé qui consiste à transformer un objet en une chaine de caractére, puis l'écrire dans un fichier texte.
    Pour la question de la vitesse, je n'ai jamais lu nulle part que c'était LA solution irremplacable. Donc ce doit être au mieu aussi rapide, au pire plus lent qu'une relecture des données depuis le SGBD.

    Maintenant au niveau de l'utilisation, en serialisant les données tu deconnectes l'utilisateur des données véritable.
    En effet tu en crées une copie des données, puis tu les mets en session.
    Donc lorsqu'un autre utilisateur vas modifier une donnée que sera passera t'il ?
    Si le cas n'est pas prévu, tes données en session seront obsolète et à terme pourraient créer des problèmes d'intégrité des données.

    AMHA, pour ton livre d'or la question ne se pose pas. Utilise le SGBD. Pour le panier, enregistre le numéro client, numéro de commande en cours en session et re lit à chaque fois les données depuis la BDD.
    Sa tévitera des problèmes.


    bye

  3. #3
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut
    Merci de ta réponse rapide et précise

    Ce n'est pas que j'ai peur que ma base de données se vautre, c'est surtout que j'aimerais la soulager un peu : lorsqu'une page s'ouvre, je lis dans la BDD les différentes catégories de produits, je fais une recherche dans la BDD pour savoir les articles les plus vendus, les articles en promotion, je lis les messages du livre d'or, ... Bref, le nombre de connection simultanée à une BDD est quelque fois limités (dans mon cas, je n'ai pas ce soucis, mais je prévoie quand même). Donc si je peux me permettre de ne pas ouvrir à chaque page une connection vers ma BDD, c'est toujours ça de gagné.

    Cependant, j'ai en effet bien compris quand dans ce cas, ça n'a aucun intérêt, et je risque en effet de gros soucis (pour le livre d'or ça ne serait pas grave, mais pour le panier si). Mais pour le panier, quels problèmes pourais-je avoir à serializer le tableau contenant les identifiants avec leur quantité? Je lirais biensûr sur la BDD leur nom et leur prix, mais pour ce qui est de la quantité et de l'identifiant, ils ne risquent pas de changer (et de créer des incohérences entre mon objet et la bdd)... L'avantage de sérializer serait de ne pas avoir à recréer mon panier à chaque page, avec le contenu de mes variables de session...

    J'ai une dernière question qui m'est venue en tête en te lisant : quel est l'intérêt de sérializer des objet, si pour transmettre des données il vaut mieux passer par des variables de session, ou relire les données dans la BDD? Aurais-tu des exemples en tête de cas où cette fonctionnalité serait utile par rapport aux autres méthodes citées ci-dessus?

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par kaymak
    Pour la question de la vitesse, je n'ai jamais lu nulle part que c'était LA solution irremplacable.
    Entièrement d'accord
    Donc ce doit être au mieux aussi rapide, au pire plus lent qu'une relecture des données depuis le SGBD.
    Pas tout à fait d'accord, il est tout à fait probable que la dé-sérialisation (beurk, quel barbarisme, mais j'ai pas mieux) d'un objet construit à partir de requêtes complexes (jointures, agrégations, etc...) soit plus rapide que la reconstruction de cet objet.

    Donc, pour conclure dans la facilité : ça dépend... (oui je sais, ça dépasse )

    Néammoins, le reste de l'argumentation est excellente et va pouvoir t'aider à faire ton choix.

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par ChriGoLioNaDor
    Quel est l'intérêt de sérializer des objet, si pour transmettre des données il vaut mieux passer par des variables de session, ou relire les données dans la BDD ?
    Même si tu utilises les variables de session, ton objet doit être sérialiser entre chaque page. Ces deux techniques sont donc complémentaires et non concurrentes.

    Pour ce qui est du match sérialisation vs accès mysql, il faut gérer au cas par cas.
    A mon avis, qui n'est pas celui d'un expert, j'utiliserais en priorité les accès BDD, mais dès que les temps d'accès dûs à des jointures et autres opérations de regroupement seront prohibitifs, je commencerait à réfléchir à la sérialisation. Puis vient en ligne de compte le volume de l'objet, dont les temps de transformation doivent être comparés avec les temps d'éxécution et de retour des requêtes.

    Bref, y a pas de recette toute faite.

  6. #6
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut
    Je viens de comprendre une grande chose : serialize ne sert pas à transmettre les données entre 2 pages, mais juste à linéariser l'objet, que je transmet ensuite via mes variables de session, par exemple. OK, c'est déjà un grand pas

    C'est encore un peu flou, tout ça, mais je commence à comprendre pas mal de choses

    Et lorsque je serialise un objet, est-il risqué de le passer par une variable (de session, avec un $_POST etc)? Je suppose que la taille des données transférées de cette façon est limitée, mais je ne connais hélas pas cette dernière donc pour le transfert, me conseillez-vous le passage par une BDD (je sauvegarde dans une table mes objets sérialisés, et je les lis et modifie si nécessaire lors de l'appel de la prochaine page, et les supprime au bout d'un certain temps), le passage par une variable $_POST ou $_SESSION, ou par un fichier texte (ayant par exemple l'identifiant de session comme nom)?

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    La sérialisation de données, ou plus généralement, le passage d'une page a l'autre de données extraites d'une base ne sont pas une bonne méthode.
    Je ne sais pas si je me fais bien comprendre.
    Si ta conception tient la route, tu ne devrais passer que des IDentifants en parametres de tes pages ou dans tes sessions.

    Utiliser des serialisations ou refaires des requetes, c'est une question qui à mon avis n'a pas vraiment de légitimité.
    Imagine dans ton cas, tu te poses la question de retransmettre tous tes messages du livre d'or dans une variable. Que va-t-il se passer si quelqu'un modifie ou ajoute un message pendant ce temps? Les données transmises de page en page ne vont pas etre mise a jour puisque non tirées d'une base de données.

    Bref, hormis cas tres particulier (qui existent certes), passer des variables autres que des identifiants n'est généralement pas bon signe.

  8. #8
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 177
    Points : 73
    Points
    73
    Par défaut
    Oui oui ça j'avais bien saisi. Bon eh bien je pense avoir tout saisi (ou du moins c'est mon impression :p ). Merci à tous pour votre aide précieuse, et à bientôt peut être.

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

Discussions similaires

  1. [POO] Cours sur le PHP orienté objet
    Par gforce dans le forum Langage
    Réponses: 12
    Dernier message: 06/11/2006, 09h20
  2. [POO] question sur les interfaces
    Par root76 dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 20/05/2006, 17h12
  3. [POO]Question sur les constructeurs
    Par Burinho dans le forum Langage
    Réponses: 16
    Dernier message: 08/04/2006, 21h56
  4. [PEAR] Objet : Question sur le passage de variable
    Par Norabfr dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 07/01/2006, 01h07
  5. [FLASH 8] Question sur la portée des objets.
    Par i_shinji dans le forum Flash
    Réponses: 1
    Dernier message: 02/11/2005, 17h18

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