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 :

Utilisation correcte de isset() dans if()


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Décembre 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Chef d'entreprise

    Informations forums :
    Inscription : Décembre 2024
    Messages : 4
    Par défaut Utilisation correcte de isset() dans if()
    Bonjour,

    Je voulais savoir quelle est la bonne syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(isset($var) == 'valeur')
    {
        #code
    }
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(isset($var) AND $var == 'valeur')
    {
        #code
    }
    Car les deux semble fonctionner

    Merci

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 699
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 699
    Par défaut
    la fonction isset retourne un booléen donc le 1er bout de code que vous montrez va exécuter le "if" quand la variable est définie et quelque soit sa valeur :
    https://www.php.net/manual/fr/function.isset.php
    https://www.php.net/manual/fr/types.comparisons.php

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chef d'entreprise
    Inscrit en
    Décembre 2024
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Chef d'entreprise

    Informations forums :
    Inscription : Décembre 2024
    Messages : 4
    Par défaut
    Très bien, merci pour cette précision.

    Je suis en train de passer de PHP 7 à PHP 8 (il serait temps...) et lorsque je ne mets pas isset(), j'ai un Warning: Undefined.
    J'imagine donc que je dois à chaque fois soit déclarer la variable null ou alors utiliser isset() à chaque fois ?

    Par exemple voici mon ancien code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	if($_POST['foo'] == 'bar') {
            //...
        }

    Les trois différentes manières qui suivent sont elles toute bonnes ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     $var = null;
        $var = $_POST['foo'];
     
    	if($var === 'bar'){
            //...
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     if(isset($_POST['foo'])) $var = $_POST['foo'];
        else $var = null;
     
    	if($var === 'bar'){
            //...
        }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(isset($_POST['foo']) AND $_POST['foo'] === 'bar'){
            //...
        }

  4. #4
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    Par défaut
    Citation Envoyé par tarharnak Voir le message
    lorsque je ne mets pas isset(), j'ai un Warning: Undefined.
    "Undefined" mais encore? Lis le message jusqu'au bout, il est là pour te dire précisément ce qui coince.
    J'imagine donc que je dois à chaque fois soit déclarer la variable null ou alors utiliser isset() à chaque fois ?

    Par exemple voici mon ancien code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	if($_POST['foo'] == 'bar') {
            //...
        }
    Le problème ici est que tu ne sais pas s'il existe une clef 'foo' dans le tableau $_POST. Si cette clef n'existe pas, un warning sera émis pour te le signaler dés que tu utiliseras $_POST['foo'] dans ton code (à l'exception de isset($_POST['foo']) et dans le cas d'une utilisation avec l'opérateur null coalescent).

    Les trois différentes manières qui suivent sont elles toutes bonnes ?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     $var = null;
        $var = $_POST['foo'];
     
    	if($var === 'bar'){
            //...
        }
    Non, la première ligne ne sert à rien et de toute manière une variable qui n'est pas définie sera toujours évaluée à null.
    De plus tu ne testes pas l'existence de la clef 'foo', donc si elle n'existe pas => Warning: Undefined array key "foo".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     if(isset($_POST['foo'])) $var = $_POST['foo'];
        else $var = null;
     
    	if($var === 'bar'){
            //...
        }
    Ça c'est correct.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(isset($_POST['foo']) AND $_POST['foo'] === 'bar'){
            //...
        }
    et ça c'est correct aussi. C'est la même chose que précédemment sauf que tu n'utilises pas de variable intermédiaire. (Préfères utiliser && plutôt que AND, qui s'écrit d'ailleurs en minuscule, et réserve le pour les cas plus subtile de priorité des opérateurs).

    Variantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    // Plus explicite que isset() (puisqu'il s'agit de tester l'existence d'une clef)
     
    if (array_key_exists('foo', $_POST) && $_POST['foo'] === 'bar') {
        //...
    }
     
    // L'opérateur ternaire    condition ? valeur si vrai : valeur si faux
     
    $var = isset($_POST['foo']) ? $_POST['foo'] : null;
     
    if ($var === 'bar') {
        //...
    }
     
    // L'opérateur null coalescent (null coalescing operator).
     
    $var = $_POST['foo'] ?? null;
     
    if ($var === 'bar') {
        //...
    }

  5. #5
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    // Plus explicite que isset() (puisqu'il s'agit de tester l'existence d'une clef)
     
    if (array_key_exists('foo', $_POST) && $_POST['foo'] === 'bar') {
        //...
    }
    Mais beauuuucoup moins performant.

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 348
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 348
    Billets dans le blog
    17
    Par défaut
    Généralement on évite de travailler sur $_POST, $_GET, etc. et on importe les valeurs soit directement dans une variable scalaire, soit dans un tableau. Ainsi on peut toujours revenir sur les $_POST, etc. originaux si besoin.

    => Récupère tes valeurs en début de script ou donne une valeur par défaut si inexistante. Pour cela il existe l'opérateur ??.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $foo = $_POST['foo'] ?? null; // $foo vaudra la valeur de $_POST['foo'] ou null par défaut, cela sans warning
     
    if ($foo === null) {
        echo '$foo non transmis';
    } else {
        ...
    }
    Alternative :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $request['post']['foo'] = $_POST['foo'] ?? null;
    ...

  7. #7
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Mais beauuuucoup moins performant.
    Ce n'est plus le cas à partir de PHP >= 7.4.
    Effectivement pour PHP 7.3, on peut voir que array_key_exists est environ 1.5 fois plus lent que isset, mais pour les versions ultérieures c'est kif-kif bourricot.

Discussions similaires

  1. Utilisation correcte ou 'moderne' de LOCK dans un logiciel ?
    Par maximebonin dans le forum Développement
    Réponses: 10
    Dernier message: 18/07/2017, 13h34
  2. Réponses: 30
    Dernier message: 05/12/2013, 17h48
  3. utiliser le même fichier dans plusieurs projets vc++6
    Par yannick_sch dans le forum MFC
    Réponses: 5
    Dernier message: 12/02/2004, 17h39
  4. Utilisation de l'unicode dans un algo de cryptage
    Par Zazeglu dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 28/10/2003, 14h38
  5. Réponses: 2
    Dernier message: 24/06/2003, 20h31

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