Probleme modification attribut static
Résolu/Fermé
L1RW56
-
18 févr. 2014 à 16:00
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 19 févr. 2014 à 09:09
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 19 févr. 2014 à 09:09
A voir également:
- Probleme modification attribut static
- Suivi de modification word - Guide
- Logiciel modification pdf gratuit - Guide
- Modification dns - Guide
- Modification d'écriture - Guide
- Modification liste déroulante excel - Guide
5 réponses
Utilisateur anonyme
18 févr. 2014 à 16:28
18 févr. 2014 à 16:28
Bonjour
J'ai l'impression que tu confonds l'attribut "static" avec la notion de variable de session.
Quand tu as modifié une variable, fût-elle "static", et que tu cliques sur un lien, tu appelles un nouvelle page, donc tu démarres un nouveau script. Il démarre à partir de 0, avec ses propres variables et éventuellement certaines variables créées par le système comme $_POST ou $_GET ou $_SESSION. Mais la variable $salaire de la classe que tu as définie est recréée et n'a aucun 'souvenir' de ce qui s'est passé dans la page précédente.
Pour mémoriser une variable et la transmettre d'une page à l'autre, il faut utiliser les sessions.
Tu mets
J'ai l'impression que tu confonds l'attribut "static" avec la notion de variable de session.
Quand tu as modifié une variable, fût-elle "static", et que tu cliques sur un lien, tu appelles un nouvelle page, donc tu démarres un nouveau script. Il démarre à partir de 0, avec ses propres variables et éventuellement certaines variables créées par le système comme $_POST ou $_GET ou $_SESSION. Mais la variable $salaire de la classe que tu as définie est recréée et n'a aucun 'souvenir' de ce qui s'est passé dans la page précédente.
Pour mémoriser une variable et la transmettre d'une page à l'autre, il faut utiliser les sessions.
Tu mets
session_start();au début de chacune de tes bages et tu utilises le tableau superglobal $_SESSION pour enregistrer ce que tu veux dedans et le retrouver plus tard.
Merci pour ta réponse le pére.
En faite, lorsque je clique sur un lien, je n'ouvre pas vraiment une nouvelle page.
J'envoi juste une variable de type $_GET à mon script index.php qui se charge d'inclure le fichier correspondant à la variable $_GET.
Ce script inclut aussi les classes nécessaires.
Du coup, en faisant cela, est-ce que le script index.php sera rechargé à chaque fois et donc recharge à chaque fois les classes?
Si c'est le cas, effectivement je n'ai pas d'autre choix que d'utiliser une variable de session.
Ou alors, existe-il un moyen de changer de page en conservant "l'état" d'une classe?
En faite, lorsque je clique sur un lien, je n'ouvre pas vraiment une nouvelle page.
J'envoi juste une variable de type $_GET à mon script index.php qui se charge d'inclure le fichier correspondant à la variable $_GET.
Ce script inclut aussi les classes nécessaires.
Du coup, en faisant cela, est-ce que le script index.php sera rechargé à chaque fois et donc recharge à chaque fois les classes?
Si c'est le cas, effectivement je n'ai pas d'autre choix que d'utiliser une variable de session.
Ou alors, existe-il un moyen de changer de page en conservant "l'état" d'une classe?
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
18 févr. 2014 à 16:57
18 févr. 2014 à 16:57
Salut,
En effet chaque requête recharge à chaque fois toutes tes classes et correspond à une nouvelle exécution de ton script. PHP étant un langage stateless, tu ne peux pas conserver d'état entre deux requêtes.
La solution est donc bien d'utiliser les sessions php.
Bonne journée
En effet chaque requête recharge à chaque fois toutes tes classes et correspond à une nouvelle exécution de ton script. PHP étant un langage stateless, tu ne peux pas conserver d'état entre deux requêtes.
La solution est donc bien d'utiliser les sessions php.
Bonne journée
Utilisateur anonyme
18 févr. 2014 à 17:19
18 févr. 2014 à 17:19
J'envoi juste une variable de type $_GET à mon script index.php
Tu rouvres peut-être la même page, mais ça ne change rien : le script précédent est terminé depuis belle lurette et c'est un nouveau script qui commence, peu importe que ce soit le même code ou non.
Tu rouvres peut-être la même page, mais ça ne change rien : le script précédent est terminé depuis belle lurette et c'est un nouveau script qui commence, peu importe que ce soit le même code ou non.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci pour ta réponse Pitet.
Je comprend mieux maintenant.
J'aurai une dernière question sans vouloir abuser.
Il n'est pas possible de modifier un attribut static par un utilisateur puisque il faut un formulaire HTML et que ce dernier va, dans tous les cas, recharger la page?
Si c'est le cas, n'existe-t-il pas une fonction PHP permettant de sauvegarder l'état d'une classe dans une session? (un peu comme serialize() pour les instances)
Si je n'ai pas de réponse, ce n'est pas grave, c'est juste par curiosité.
Encore merci à vous pour vos indications
Bonne journée
Je comprend mieux maintenant.
J'aurai une dernière question sans vouloir abuser.
Il n'est pas possible de modifier un attribut static par un utilisateur puisque il faut un formulaire HTML et que ce dernier va, dans tous les cas, recharger la page?
Si c'est le cas, n'existe-t-il pas une fonction PHP permettant de sauvegarder l'état d'une classe dans une session? (un peu comme serialize() pour les instances)
Si je n'ai pas de réponse, ce n'est pas grave, c'est juste par curiosité.
Encore merci à vous pour vos indications
Bonne journée
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
525
Modifié par Pitet le 19/02/2014 à 09:17
Modifié par Pitet le 19/02/2014 à 09:17
Tu peux tout a fait sérialiser une classe pour ensuite l'enregistrer en session :
https://www.php.net/manual/fr/language.oop5.serialization.php
Attention les attributs statiques d'un objet ne sont pas sérialisés.
Edit : je viens de voir que ta classe est tout en static (attribut et méthode). Tu perds donc les avantages du concept objet puisque toutes tes instances de la classe InternalTeacher partage le même salaire.
https://www.php.net/manual/fr/language.oop5.serialization.php
Attention les attributs statiques d'un objet ne sont pas sérialisés.
Edit : je viens de voir que ta classe est tout en static (attribut et méthode). Tu perds donc les avantages du concept objet puisque toutes tes instances de la classe InternalTeacher partage le même salaire.