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 :

unset sans isset ? [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    mars 2019
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : mars 2019
    Messages : 242
    Points : 85
    Points
    85
    Par défaut unset sans isset ?
    Bonjour,

    Je suis en train de développer un site.
    Je dois régulièrement, au fil du programme, supprimer des variables de sessions.

    Donc je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (isset($_SESSION['monTrucAEffacer'])) {
        unset($_SESSION['monTrucAEffacer']);
    }
    C'est un peu redondant.
    J'ai lu le manuel, si on fait un unset sur une variable qui n'existe pas, il n'y a pas d'erreur retournée.

    Je pourrai donc me contenter de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     unset($_SESSION['monTrucAEffacer']);
    et puis c'est tout.

    Mais ... et dans l'avenir ? Le site durera (je l'espère) quelques années, j'aimerai m'éviter de devoir remettre les mains dans le cambouis pour ça.

    Vous faites comment vous ? (vous aussi vous vous faites des noeuds dans le cerveau pour des broutilles de ce genre ?)

    D'avance merci pour vos avis

  2. #2
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    octobre 2006
    Messages
    8 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 8 813
    Points : 4 278
    Points
    4 278
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    ce que je ferais pour éviter d'avoir plus tard 50000 modifs à faire (et bien sûr d'oublier d'en faire), je créerais une fonction :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fct_unset($var){
    unset($var);
    }
    et partout où tu dois supprimer une variable : fct_unset($variable_a_supprimer);. Ainsi, si un jour, il faut modifier la façon de supprimer une variable, y a juste la fonction à mettre à jour.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    mars 2009
    Messages
    2 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : mars 2009
    Messages : 2 413
    Points : 5 321
    Points
    5 321
    Par défaut
    Vous faites comment vous ? (vous aussi vous vous faites des nœuds dans le cerveau pour des broutilles de ce genre ?)
    Non.

    Aussi, un site internet est quelque chose d'éphémère, sa durée de vie est courte et encore plus courte sans qu'il soit modifié voire complètement refait. Donc en partant de ce constat, inutile de trop te préoccuper de ce genre de choses, et personne n'a de boule de cristal pour savoir si telle ou telle pratique sera toujours possible dans le futur. (sauf mention contraire du manuel PHP, qui peut décourager certains usages ou fonctions voués à disparaître dans les prochaines versions). Tu peux par contre regarder sur le manuel, si ce que tu utilises avec la version de PHP que tu pratiques a toujours court dans les versions plus récentes.

    Maintenant l'un comme l'autre ne me choque pas plus que ça: tester si une variable existe avant d'appliquer unset découle d'un certain bon sens, mais il se trouve que ce n'est pas nécessaire donc tu peux sucrer le test. Personnellement je pencherais plutôt pour la solution courte, mais c'est une question de goût (certains trouvent plus lisible un code très verbeux, ce n'est pas du tout mon cas, pour moi la lisibilité est dans la concision du code).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    mars 2009
    Messages
    2 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : mars 2009
    Messages : 2 413
    Points : 5 321
    Points
    5 321
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Bonjour,

    ce que je ferais pour éviter d'avoir plus tard 50000 modifs à faire (et bien sûr d'oublier d'en faire), je créerais une fonction :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fct_unset($var){
    unset($var);
    }
    et partout où tu dois supprimer une variable : fct_unset($variable_a_supprimer);. Ainsi, si un jour, il faut modifier la façon de supprimer une variable, y a juste la fonction à mettre à jour.
    Que nenni! unset dans une fonction se contentera de détruire la copie locale de $var dans le scope de la fonction, elle laissera la variable passée en paramètre inchangée.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Membre régulier Avatar de RowanMayfair
    Femme Profil pro
    Développeuse Freelance
    Inscrit en
    mars 2019
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Développeuse Freelance

    Informations forums :
    Inscription : mars 2019
    Messages : 242
    Points : 85
    Points
    85
    Par défaut
    En effet je viens de tomber dessus, c'est le 1er avertissement dans le manuel PHP.

    Bon je vais laisser mes isset finalement. C'est lourd, mais au moins j'aurai pas de mauvaises surprises (j'en aurai ailleurs à n'en pas douter )

    Merci pour vos avis

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Architecte Web / Android
    Inscrit en
    août 2003
    Messages
    6 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 6 372
    Points : 18 495
    Points
    18 495
    Par défaut
    Citation Envoyé par RowanMayfair Voir le message
    Mais ... et dans l'avenir ? Le site durera (je l'espère) quelques années, j'aimerai m'éviter de devoir remettre les mains dans le cambouis pour ça.
    Les probabilités que le fonctionnement d'unset change sont quand même minime. Je m'embêterais pas trop avec le test précédent le unset. Et quand bien même un jour ca arrive des outils de migration permettent de faire ce genre de modif à ta place (Rector par exemple)

    Citation Envoyé par CosmoKnacki Voir le message
    Aussi, un site internet est quelque chose d'éphémère, sa durée de vie est courte et encore plus courte sans qu'il soit modifié voire complètement refait.
    Tu as une vision surement plus consumer/marketing du web , mais j'ai des applis web qui fonctionnent depuis des années dans l'industrie et qu'il n'est absolument pas question de modifier tant que les choses auxquels elles sont connectés n'évoluent pas (coût du dév, coût de la formation utilisateur, etc ...). Donc il faut maintenir à jour avec les technos serveurs récentes mais certainement pas tout réécrire et ce pendant de (trop) nombreuses années.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    octobre 2006
    Messages
    8 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 8 813
    Points : 4 278
    Points
    4 278
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Que nenni! unset dans une fonction se contentera de détruire la copie locale de $var dans le scope de la fonction, elle laissera la variable passée en paramètre inchangée.
    OK, je savais pas ; alors autre possibilité (pour mettre le unset directement dans la page où a été créée la variable, sans pour autant avoir des milliers de modifs à faire) : on écrit ce fichier :
    fct_unset.php
    et partout où on a une variable à effacer :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    &$var=&$variable_a_supprimer;
    include (path)/fct_unset.php
    Est-ce que ça irait ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  8. #8
    Rédacteur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2002
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2002
    Messages : 608
    Points : 1 554
    Points
    1 554
    Par défaut
    Le but d'unset est que la variable n'existe plus dans la suite du code. Si elle n'existait pas déjà, on s'en fout. Donc je doute aussi que le changement d'unset change et que les dev de php obligent à vérifier l'existence de la variable, et j'enlèverais les tests.

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    juillet 2021
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : juillet 2021
    Messages : 20
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    Est-ce que ça irait ?
    En théorie, c'est bien tenté ! En pratique, cette utilisation me semble horrible et à priori ça ne va détruire que la variable $var dans ton exemple : https://www.php.net/manual/fr/langua...nces.unset.php

    Dans les commentaires utilisateur sur la documentation php, il est également recommandé de ne pas faire un test avec isset() avant de détruire une variable avec unset() : https://www.php.net/manual/fr/functi....php#usernotes

    PHP pourra déclencher une notice/un warning si on essaye de supprimer un élément d'un tableau qui n'existe pas (ou la propriété d'un objet qui n'existe pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    unset($unexist); // pas d'erreur
     
    $exist = []; 
    unset($exist['nokey']); // pas d'erreur
     
    unset($unexist['nokey']); // Undefined variable unexist
     
    $exist = new StdClass();
    unset($exist->noprop); // pas d'erreur
     
    unset($unexist->noprop); // Undefined variable unexist si php <= 7.3, pas d'erreur si php >= 7.4

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    octobre 2006
    Messages
    8 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : octobre 2006
    Messages : 8 813
    Points : 4 278
    Points
    4 278
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    pourquoi mon code te semble horrible ?

    Cela dit, ton lien semble effectivement dire que le but ne serait pas atteint

    Enfin, selon ce que je comprends dans l'autre lien, le test isset n'est pas déconseillé ; ils disent seulement qu'il est inutile.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

  11. #11
    Rédacteur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2002
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2002
    Messages : 608
    Points : 1 554
    Points
    1 554
    Par défaut
    Ce qui est inutile est déconseillé puisque c'est plus de code à lire et à maintenir et c'est un test de plus donc c'est mauvais pour les perfs (même si ça ne va pas se connaître de façon visible). Le plus simple est le mieux.

  12. #12
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Architecte Web / Android
    Inscrit en
    août 2003
    Messages
    6 372
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte Web / Android
    Secteur : Industrie

    Informations forums :
    Inscription : août 2003
    Messages : 6 372
    Points : 18 495
    Points
    18 495
    Par défaut
    En toute honnêteté unset des variables reste un cas très particulier. En général on préfère mettre la variable à null (par exemple). Plutôt que de s'embêter à la supprimer et donc induire des tests d'existence.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Autre
    Inscrit en
    juillet 2021
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : juillet 2021
    Messages : 20
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par laurentSc Voir le message
    pourquoi mon code te semble horrible ?
    Je n'ai pas dis que ton code est horrible, le fait de passer la variable par référence était une bonne idée sur le principe (en tout cas c'est original comme solution, même si je préfère ta première proposition concernant l'utilisation d'une fonction). Mais son utilisation serait un vrai casse tête, pour t'en convaincre essaye de reprendre un projet PHP et de remplacer toutes les fonctions par des scripts avec un include (et attention au nommage des variables dans le contexte global !).

    De plus, si l'objectif de cette solution est d'éviter de modifier le code si jamais la fonction unset() venait à changer, ceci ne fonctionnera pas dans tous les cas. Par exemple, imaginons que demain la fonction unset() requiert un 2e paramètre, il faudra alors modifier l'utilisation de cette fonction dans le script à inclure mais il faudra également modifier tous les endroits où ce script est inclus pour ajouter le deuxième paramètre lors de l'appel.

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

Discussions similaires

  1. Comment récupérer le nom du fichier sans l'extension ?
    Par altahir007 dans le forum Langage
    Réponses: 16
    Dernier message: 13/11/2009, 13h20
  2. [SQL] Bonne utilisation de isset et unset ?
    Par tintin72 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 04/07/2007, 18h50
  3. MDI sans MFC, possible ?
    Par delire8 dans le forum MFC
    Réponses: 4
    Dernier message: 17/06/2002, 07h38
  4. [Kylix] Fiches sans bordure
    Par alex dans le forum EDI
    Réponses: 4
    Dernier message: 28/04/2002, 21h19

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