|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Nouveau Membre du Club
![]() Inscription : janvier 2008 Messages : 125 ![]() |
Bonjour,
J'ai fait un site en objet et ces objets et je les places dans les sessions pour les transporter de page en page. Une fois la nouvelle page chargé je recrée une variable avec l'objet de la session transporté. Code :
D'où ma question : Faut-il utiliser l'objet de la session Code :
$_SESSION['User']->MafonctionPublic(); ou alors utiliser la variable avec l'objet crée et avant chaque changement de page replacer l'objet dans la session Je vous demande ça pour savoir quelle est la meilleur façon de coder et qui sera le plus rapide. Si il y a d'autres solutions je suis tous ouïe. Merci |
||
|
|
00
|
|
|
#2 | |||
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Hello
Citation:
Remarque, en PHP les objets sont systématiquement manipulés par référence: Code :
Fais quand même attention: les sessions ne sont pas partagés entre les utilisateurs, donc les objets que tu mettra dessus ne seront pas synchrones entre plusieurs utilisateurs, ce qui peut conduire à des collisions si par exemple ils modifient les mêmes tuples de database.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|||
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Sébastien JoverIngénieur d'étude Inscription : mars 2010 Messages : 22 ![]() |
Pour envoyer un objet en session en gardant ses propriétés il faut utiliser la fonction serialize(). Je pense que cela répondra a tes question. :-)
|
|
|
00
|
|
|
#4 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
Pas nécessairement: PHP appelle automatiquement serialize avant de se terminer.
Si tes objets ont une forme spécifique, tu peux implémenter l'interface Serializable qui permet de définir comment les objets sont sérialisés; ce n'est utile que dans le cas où tes objets ont un comportement de persistance particulier comme des objets caractérisant une connexion à la base de données ou une ressource sur un fichier. Tu trouvera toute la doc nécessaire ici: http://php.net/manual/en/function.serialize.php J'ai écrit il y a quelque temps un article (que je n'ai toujours pas publié - honte sur moi) sur l'implémentation d'une identity map sur session: un cache d'objets sur session si tu préfères: http://www.developpez.net/forums/d99...-contexte-php/ -- Edit waaah il faut vraiment que je le corrige ce truc, j'en suis plus là depuis un moment
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 706 ![]() |
Salut
De mon coté, et pour que l'Objet et l'élément dans la session soit une même référence, je procède ainsi : Code :
Et bien sûr, les valeurs seront aussi conservées tout au long de la navigation. J'ai jusqu'à lors jamais eu besoin de sérialiser ou désérialiser, Php le fait automatiquement. Il faut juste que la déclaration de la classe soit faite avant.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||
|
|
00
|
|
|
#6 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
c'est pas serialize mais session_encode
__________________
http://blog.stealth35.com/ |
|
|
00
|
|
|
#7 |
|
Futur Membre du Club
![]() Sébastien JoverIngénieur d'étude Inscription : mars 2010 Messages : 22 ![]() |
session_encode() is the PHP default for serialising into and out of sessions but does not offer the flexibility to read the stored data outside of a session.
serialize() does everything almost exactly the same as session_encode() and lets you read session data outside of sessions but the two types of serialisation do not work together. You cannot replace session_encode() with serialize(). |
|
|
01
|
|
|
#8 |
![]() ![]() Benjamin DelespierreDéveloppeur Web Inscription : février 2010 Messages : 2 984 ![]() |
A moins que vous n'utilisiez un mécanisme de persistance maison (session_set_save_handler) on ne se préoccupe jamais de comment PHP sérialise et déserialise les données.
Implémentez Serializable là ou il faut et PHP fait le reste
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même). Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...". Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug. Les boutons et existent, servez-vous en
|
|
00
|
|
|
#9 | |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
Citation:
__________________
http://blog.stealth35.com/ |
|
|
|
01
|
|
|
#10 |
|
Futur Membre du Club
![]() Sébastien JoverIngénieur d'étude Inscription : mars 2010 Messages : 22 ![]() |
Eh bien tant qu'à faire autant utiliser le plus flexible possible... non? Pourquoi veux tu utiliser session_encode plutôt que serialize? Dans quel objectif? As-tu un argument... Cela pourrait m’intéresser à titre personnel.
Parceque si je reprends ton commentaire: "c'est pas serialize mais session_encode" => Cela signifie qu'utiliser serialize est une faute... Or j'utilise toujours cette méthode sans désagréments aucun. |
|
|
00
|
|
|
#11 | |
|
Futur Membre du Club
![]() Sébastien JoverIngénieur d'étude Inscription : mars 2010 Messages : 22 ![]() |
Citation:
Tant qu'à faire puisque vous m'avez l'air d'être ultra compétents dans bcp de domaines du PHP pourriez-vous faire un petit tour sur ma question ? http://www.developpez.net/forums/d10...rtie-image-gd/ Merci d'avance |
|
|
|
01
|
|
|
#12 | |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
Citation:
__________________
http://blog.stealth35.com/ |
|
|
|
00
|
|
|
#13 | |
|
Futur Membre du Club
![]() Sébastien JoverIngénieur d'étude Inscription : mars 2010 Messages : 22 ![]() |
Citation:
Après serialize existe aussi ;-) (donc ce n'est pas un argument) et fonctionne très bien mais si je comprends bien il est préférable d'utiliser session_encode dans la cadre des session afin de coller au spécificités du serveur. J'ai tout bien compris ? |
|
|
|
00
|
|
|
#14 |
![]() ![]() Inscription : septembre 2010 Messages : 7 101 ![]() |
voila, (un)serialize marche uniquement, en module file avec le serializer php (et sans Suhosin), alors que session_(d)encode marche avec tout type de module serializer (et Suhosin)
__________________
http://blog.stealth35.com/ |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com