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 :

isset(), !empty(), " and '


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 194
    Par défaut isset(), !empty(), " and '
    Bonjour à toutes et tous,

    Puis-je résumer ainsi ou suis-je inexact dans les 2 phrases suivantes?
    - La fonction isset() vérifie l'existence d'une variable peu importe si elle est vide ou pas.
    - La fonction !empty() vérifie si une variable n'est pas vide peu importe si elle existe ou pas.
    (Elle sera évidement vide si elle n'existe pas.)

    Je profite aussi de ce post pour faire le point sur l'usage des " ou '.
    Que disent les règles de l'art sur l'usage des " ou ' en php?

    Je vous joins ci-dessous mon petit bout de code php pour tester les 2 fonctions ci-dessus.
    J'utilise les " lors du script de la fonction isset() et j'utilise le ' lors du script de la fonction !empty()...
    Histoire de varier les plaisirs... ;-)
    J'y ai ajouté un 3ème petit script qui affiche la variable sans précaution particulière.
    J'ai séparé ces 3 petits scripts par des lignes horizontales pour bien les distinguer.

    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
     
    <?php echo '<!DOCTYPE html><html>
    <head><meta charset="utf-8" /><title>Test page</title></head>
    <body><h1>Test page.</h1><hr />';
    //------------------------------------------------------------
     
    if (isset($_GET['Try'])) {
      echo "\$_GET['Try'] is set. Value is: ".$_GET['Try'];
      var_dump($_GET['Try']);}
    else {echo "\$_GET['Try'] is not set.";}
     
    echo "<hr />"; //---------------------------------------------
     
    if (!empty($_GET['Try'])) {
      echo '$_GET[\'Try\'] is not empty. Value is: '.$_GET['Try'];
      var_dump($_GET['Try']);}
    else {echo '$_GET[\'Try\'] is empty.';}
     
    echo '<hr />'; //---------------------------------------------
     
    echo $_GET['Try'].'<hr /></body></html>'; ?>
    Je vous remercie de m'excuser pour ces quelques compressions de code.
    Je l'ai fait afin que cela puisse tenir facilement même dans un petit écran.

    Autre question pour déclarer une variable en php.
    Si c'est un nombre entier, j'ai compris qu'on peut simplement écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $Var=1; // par exemple
    Mais, si ce sont des caractères alphabétiques:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $Var="Abcd";
    // ou
    $Var='Abcd';
    Pourriez-vous me dire la différence exacte entre les 2 variables "$Var" ci-dessus?
    Merci.

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    ' et " permettent de délimiter une chaîne de caractères et sont donc fondamentalement équivalents.

    Essaie le code suivant et tu comprendras la différence.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $toto = 'coucou';
    $var  = "ah que $toto";
    print $var."<br/>";
     
     
    $var  = 'ah que $toto';
    print $var."<br/>";

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- isset / empty : se référer à la doc.
    Voir surtout la définition de "vide" pour empty.


    2- Lire : Apostrophes ou guillemets : lesquels choisir ?

  4. #4
    Membre très actif
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 194
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    1- isset / empty : se référer à la doc.
    Voir surtout la définition de "vide" pour empty.


    2- Lire : Apostrophes ou guillemets : lesquels choisir ?
    1- La doc manque de pédagogie à mon gout... Et la doc parle de empty() et non de son opposé !empty().
    C'est pourquoi je reformulais avec mes mots et je voulais savoir si j'étais dans l'erreur. Sur ce point ton renvoi vers la doc ne m'aide guère.

    2- Merci beaucoup pour ce lien qui est très pédago et qui met bien en avant la différence.
    Je comprends maintenant que cela n'est qu'une question de lisibilité du code et que PHP nous offre ce fantastique choix entre guillemets ou apostrophes afin de mieux servir dans un contexte ou dans un autre.
    Je m'amuserai à faire ce comparatif: Si le terrain est boueux, c'est mieux de prendre des bottes.
    En revanche, si le terrain est propre, des chaussures classiques seront plus confortables.
    Ces deux modes ont en commun de nous éviter de marcher avec les pieds nus.

  5. #5
    Membre très actif
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 194
    Par défaut
    Citation Envoyé par badaze Voir le message
    ' et " permettent de délimiter une chaîne de caractères et sont donc fondamentalement équivalents.

    Essaie le code suivant et tu comprendras la différence.
    Merci Badaze, il est évident que ta 2ème option affiche le nom de la variable $Toto et nullement son contenu.
    Le contenu de $Toto s'affiche dans la 3ème option que j'ai écrite.
    Ce ne sont là que des variantes de syntaxe.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $toto = 'coucou';
    $var  = "ah que $toto";
    print $var."<br/>";
     
    $var  = 'ah que $toto';
    print $var."<br/>";
     
    $var  = 'ah que '.$toto;
    print $var."<br/>";

    Permets-moi de reposer ma question autrement.
    Je prends bonne note que " et ' sont fondamentalement équivalent et que cela semble simplement une orientation différente de syntaxe...
    Oui mais, n'y a t'il pas d'autres différences que celles syntaxiques?
    Selon les règles de l'art, laquelle des deux orientation syntaxiques est la meilleure ou la plus recommandée?

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Il n'y a aucune différence. Lors de la compilation en opcode, les deux donnent exactement le même opcode qui est ensuite exécuté par PHP.

    Il n'y a pas de règles de l'art, choisis la technique qui te semble la plus lisible, en fonction du code, entre ',", concaténation ('ah que '.$toto), interpolation ("ah que $toto"), interpolation avec accolades ("ah que {$toto}"), (s)printf, heredoc, nowdow etc...

  7. #7
    Membre très actif
    Homme Profil pro
    Apprenti perpétuel
    Inscrit en
    Novembre 2012
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Apprenti perpétuel

    Informations forums :
    Inscription : Novembre 2012
    Messages : 194
    Par défaut
    Citation Envoyé par Tsilefy Voir le message
    Il n'y a aucune différence. Lors de la compilation en opcode, les deux donnent exactement le même opcode qui est ensuite exécuté par PHP.

    Il n'y a pas de règles de l'art, choisis la technique qui te semble la plus lisible, en fonction du code, entre ',", concaténation ('ah que '.$toto), interpolation ("ah que $toto"), interpolation avec accolades ("ah que {$toto}"), (s)printf, heredoc, nowdow etc...
    Merci Tsilefy pour ta réponse. Ok, c'est très claire. C'est comme bon nous semble.

    Pour isset() et !empty(), suis-je inexact en résumant ainsi:
    - La fonction isset() vérifie l'existence d'une variable peu importe si elle est vide ou pas.
    - La fonction !empty() vérifie si une variable n'est pas vide peu importe si elle existe ou pas.
    (Elle sera évidement vide si elle n'existe pas.)

  8. #8
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Après il faut aussi faire attention à ce qui est considéré comme ‘vide’.
    Pour la plupart des informaticiens je pense que vide équivaut à null (qui signifie sans valeur) et que 0 ou false sont des valeurs. Pour faire une analogie, 0 c’est une bouteille vide de liquide et null c’est une bouteille vide de liquide et d’air

  9. #9
    Invité
    Invité(e)
    Par défaut
    Je vais donc préciser mon propos initial, trop lapidaire.

    1- empty()
    La doc dit :
    empty — Détermine si une variable est vide
    Et précise :
    Les valeurs ci-dessous sont considérés comme étant vide :

    • "" (une chaîne vide)
    • 0 (0 en tant qu'entier)
    • 0.0 (0 en tant que nombre à virgule flottante)
    • "0" (0 en tant que chaîne de caractères)
    • NULL
    • FALSE
    • array() (un tableau vide)
    et c'est là où ça devient important, et où on peut comprendre une différence fondamentale entre :
    • isset()
    • et !empty()

    Exemples :
    $var = ''; ou $var = 0; ou $var = []; // (array) :
    Dans les 3 cas :
    • isset renvoie true, car la variable est bien "définie",
    • alors que !empty() renvoie false, car la variable est bien "définie", MAIS considérée "vide" (selon la définition ci-dessus)


    Donc :
    • isset() et !empty() sont différents
    • Mais empty() "englobe" isset() *



    * inutile d'écrire if( isset(...) && !empty(...) ), car if( !empty(...) ) suffit.
    Par contre, il ne faut pas utiliser !empty(...) si la variable peut/doit retourner une des valeurs considérées "vide".

    3-
    Citation Envoyé par Tsilefy Voir le message
    Il n'y a aucune différence. ...
    SI, il y a une différence essentielle (déjà identifiée) :
    • echo 'Voici la $var'; : $var N'est PAS interprétée par PHP (et est donc traitée comme chaîne de caractères
    • echo "Voici la $var"; : $var EST interprétée par PHP en tant que variable PHP (et vaut la valeur définie)
    Dernière modification par rawsrc ; 20/02/2019 à 08h46.

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    SI, il y a une différence essentielle (déjà identifiée) :
    Exactement, et Olivier l'a déjà pointée ("différence syntaxique") - syntaxique étant sa définition, pas la mienne :-)

    D'où sa question
    Citation Envoyé par olivierdauxais
    Oui mais, n'y a t'il pas d'autres différences que celles syntaxiques?:

Discussions similaires

  1. [1.x] Empty module and/or action after parsing the URL
    Par etoileweb dans le forum Symfony
    Réponses: 3
    Dernier message: 12/05/2011, 18h57
  2. différence entre !isset et empty.
    Par sam01 dans le forum Langage
    Réponses: 3
    Dernier message: 20/10/2006, 16h35
  3. [MySQL] Formulaire avec isset ou empty
    Par guillaume2vo dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/08/2006, 22h27
  4. Checkbox, empty, isset
    Par Anduriel dans le forum Langage
    Réponses: 1
    Dernier message: 11/07/2006, 22h23
  5. [Tableaux] la difference entre isset et empty
    Par ghita269 dans le forum Langage
    Réponses: 2
    Dernier message: 23/10/2005, 01h07

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