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 :

Code qui suit un if ()


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
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 265
    Par défaut Code qui suit un if ()
    Bonjour,
    PHP 7
    Dans la doc sur la structure if (expression) instruction, on voit que :
    « ... et si l'expression vaut FALSE, l'instruction sera ignorée. »
    Ceci est logique et conforme à à peu près tous les langages que j'ai étudiés, ... sauf que, dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    if (array_key_exists("var", $GLOBALS)) echo "Oui";
    else echo "Non";
    ?>
    La variable $var n'étant pas définie, echo "Oui" est bien ignoré le code répond "Non", parfait, mais dans ce code ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    if (array_key_exists("var", $GLOBALS)) $var = $GLOBALS['var'];
    else echo "Non";
    ?>
    La variable $var n'existe toujours pas et la commande d'assignation de $var" devrait être ignorée, non ?
    Alors comment se fait-il que j'obtienne l'erreur suivante :
    « PHP Notice: Undefined index: var in C:\inetsrv\wwwroot\test\testPHP.php on line 2 »
    Pourquoi php cherche-t-il la variable $GLOBALS['var'] si l'expression du if retourne false ?

    Même problème avec cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $var = "truc";
    $var = (array_key_exists("var", $GLOBALS) ? "var existe" : "var n'existe pas");
    echo $var;
    ?>
    Le code répond "var existe", ce qui est correct, mais pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $var = (array_key_exists("var", $GLOBALS) ? "var existe" : "var n'existe pas");
    echo $var;
    ?>
    plante avec la même erreur ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je ne reproduis ton problème sur aucun serveur.
    Tu es sûr des codes que tu nous montres ?
    Tu sembles utiliser IIS, le problème est peut être lié à ce serveur.

    Par ailleurs je ne vois pas bien à quoi servirait ce test.

    Également ton deuxieme code n'a pas de sens : $var et $GLOBALS['var'] font références à la même chose, donc affecter l'un sur l'autre ça ne donne rien.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 265
    Par défaut
    Tu es sûr des codes que tu nous montres ?
    Aussi sûr que je fais confiance à un copier-coller.

    Tu sembles utiliser IIS, le problème est peut être lié à ce serveur.
    Ben voyons ? Le problème pourrait être lié à la version Windows de php, à la rigueur, mais qu'est-ce que IIS ou Apache pourrait avoir à voir là dedans ? Ils ne font que transmettre la requête http au compilateur php. Si celui-ci détecte une erreur, ce n'est pas de leur faute.

    Par ailleurs je ne vois pas bien à quoi servirait ce test.
    À rien d'autre que de mettre en évidence le problème.
    Bien évidemment, le code réel est différent et plus utile.

    Tu dis n'avoir pas pu reproduire le problème, Est-ce que c'est avec la même version de php ?
    Moi j'ai installé la toute dernière version, soit 7.0.3; C'est peut-être là qu'est le problème.

  4. #4
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 265
    Par défaut
    En fait, c'est pour le 4e extrait que je n'ai pas fait le bon copier-coller. Je voulais dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    $var = (array_key_exists("var", $GLOBALS) ? $GLOBALS['var'] : "var n'existe pas");
    echo $var;
    ?>
    Ça me donne le message :
    PHP Notice: Undefined index: var in C:\inetsrv\wwwroot\test\testPHP.php on line 2
    Ce qui est aberration :
    Si la variable n'existe pas, alors php devrait ignorer la première commande et attribuer la valeur "var n'existe pas" à var;
    Mais au contraire, il essaie d'évaluer $GLOBALS['var'], donc le test array_key_exists("var", $GLOBALS) a retourné true;
    On dirait que l'énoncé qui commence par $var = a suffit pour créer créé une entrée temporaire dans $GLOBALS en prévision de la complétion future de l'énoncé,
    que cette entrée temporaire a réussi à satisfaire array_key_exists(), mais n'est pas assez valide pour permettre l'évaluation de $GLOBALS['var'];

    Pour étayer ma théorie, voir le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
    $var = (array_key_exists("variable", $GLOBALS) ? $GLOBALS['variable'] : "variable n'existe pas");
    echo $var;
    ?>
    Ici tout fonctionne normalement, le programme sort bien "variable n'existe pas".
    php crée peut-être une entrée provisoire pour $var dans $GLOBALS, mais c'est $variable qui est testée, et $variable n'a vraiment aucune existence, donc le test fonctionne correctement.
    Serait-ce un bogue dans php 7 ?
    array_key_exists("var", $GLOBALS) ne devrait jamais retourner true tant que la variable var n'est pas complètement créée.

    Ces bouts de code ont l'ai idiot, j'en conviens, mais je cherche à faire une fonction pour émuler une particularité très commode dans ColdFusion qui est la balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <CFPARAM NAME="var" DEFAULT="valeurDefaut">
    Son but est de créer la variable var et de lui assigner la valeur "valeurDefaut" si et seulement si elle n'existe pas.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ben voyons
    Ce n'est pas très poli. J'essai de trouver d'où pourrait venir le problème.
    Je reproduis bien le cas avec PHP 7.02 mais pas avec PHP 7.0.0.

    Son but est de créer la variable var et de lui assigner la valeur "valeurDefaut" si et seulement si elle n'existe pas.
    Puisque tu utilises PHP7, tu as le nouvel opérateur ??
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

    a priori, la condition à utiliser est :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $var = ( isset($GLOBALS['var']) ) ? $GLOBALS['var'] : "variable n'existe pas";
    echo $var;
    ?>
    Dernière modification par Invité ; 06/03/2016 à 13h06.

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Enfin bon, de toute façon il n'est pas recommandé d'utiliser $GLOBALS.
    Si les variables ont une portée, ce n'est pas pour emmerder les développeurs.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 265
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Bonjour,

    a priori, la condition à utiliser est :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    $var = ( isset($GLOBALS['var']) ) ? $GLOBALS['var'] : "variable n'existe pas";
    echo $var;
    ?>
    En effet, dans ce que j'ai appelé « création temporaire de l'entrée dans $GLOBALS » dans ma description du problème semble créer une entrée avec la valeur null, donc isset retourne bien faux.
    Merci.

  9. #9
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2009
    Messages : 265
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Je reproduis bien le cas avec PHP 7.02 mais pas avec PHP 7.0.0.
    Ah ! Alors ça serait bien un bogue introduit avec PHP 7.0.1 ou 7.0.2

    tu as le nouvel opérateur ??
    En effet, il m'avait échappé celui-là.

    Merci.

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

Discussions similaires

  1. code qui s'execute plusieurs fois
    Par khelif dans le forum JBuilder
    Réponses: 1
    Dernier message: 10/03/2005, 21h56
  2. Fenêtre (sorte de popup) qui suit la souris en onmouseover
    Par yoyot dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/03/2005, 09h52
  3. [C#]Comment executer du code qui se trouve dans une string ?
    Par freddyboy dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/02/2005, 16h31
  4. Code qui ne fonctionne pas sur Mac
    Par malbaladejo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/01/2005, 11h08

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