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 :

[Tableaux] Fonction extract() sur des variables NULL


Sujet :

Langage PHP

  1. #1
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut [Tableaux] Fonction extract() sur des variables NULL
    Bonjour à toutes et à tous,

    je viens de me rendre compte d'un truc avec la fonction extract() avec un tableau contenant des variables de valeur NULL.

    Mon code :
    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
    22
    23
    <?php
    $size = "large";
    $var_array = array("color" => "blue",
                       "test" => NULL,
    				   "size"  => "medium",
                       "shape" => "sphere");
    $count = extract($var_array, EXTR_PREFIX_ALL, "wddx");
     
    echo "<p>count : ".$count."</p>";
     
    if (isset($wddx_color))
    	echo "<p>\$wddx_color: ".$wddx_color."</p>";
     
    if (isset($wddx_test))
    	echo "<p>\$wddx_test : ".$wddx_test."</p>";
     
    if (isset($wddx_size))
    	echo "<p>\$wddx_size: ".$wddx_size."</p>";
     
    if (isset($wddx_shape))
    	echo "<p>\$wddx_shape: ".$wddx_shape."</p>";
     
    ?>
    affiche
    count : 4

    $wddx_color: blue

    $wddx_size: medium

    $wddx_shape: sphere
    Donc, bug ou extract() ne crée pas de variables de valeur NULL ?
    Comment y remédier ?

    Merci d'avance
    @+

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 179
    Points : 202
    Points
    202
    Par défaut
    doc : "isset() renvera FALSE lors du test d'une variable de valeur NULL"

  3. #3
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    oui je sais... c'était justement pour mettre en évidence le faite que $wddx_test n'a pas été créé parce qu'elle vaut NULL.

    [EDIT] je viens de te relire... [/EDIT]

  4. #4
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    alors comment faire pour ne pas avoir cette erreur :
    Notice: Undefined variable: wddx_test ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $var_array = array("aaaaaaaaa" => 1234, "test" => NULL);
    // ou
    $var_array = array("aaaaaaaaa" => 1234);
    extract($var_array, EXTR_PREFIX_ALL, "wddx");
     
    // test de la variable
    if ( is_null($wddx_test) ) // -> Notice: Undefined variable: wddx_test
        echo("\$wddx_test vaut NULL");
    Désirant supprimer le message d'erreur, j'ai pensé mettre un isset() avant le is_null()
    mais apparemment cela n'est pas adapté car isset() retourne FALSE sur une variable de valeur NULL... (j'avais jamais remarqué)


  5. #5
    Inactif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 179
    Points : 202
    Points
    202
    Par défaut
    $var_array = array("aaaaaaaaa" => 1234, "test" => NULL);
    et
    $var_array = array("aaaaaaaaa" => 1234);

    ce n'est pas la même chose...

    Dans le premier cas tu n'auras pas de Notice, car la valeur existe.

  6. #6
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    oui mais justement, je dois prévoir les 2 possibilités ! (c'est pourquoi j'avais mis "// ou" )

  7. #7
    Inactif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 179
    Points : 202
    Points
    202
    Par défaut
    PHP ne fait pas (assez) la distinction entre NULL et variable non définie, donc ce que tu cherches à faire est compliqué.

    Essaie qqchose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if (!array_key_exists('wddx_test', get_defined_vars())) {
      echo 'not defined';
    }
    else if (is_null($wddx_test)) {
      echo 'null';
    }
    else {
      echo 'not null';
    }

  8. #8
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    merci sielfried ! cela semble fonctionner...

    @+

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

Discussions similaires

  1. La fonction str qui renvoit "None" sur des variables d'environnements
    Par doommick31 dans le forum Général Python
    Réponses: 2
    Dernier message: 17/11/2009, 09h10
  2. [Tableaux] Syntaxe pour transmettre des variables
    Par kilkikou dans le forum Langage
    Réponses: 4
    Dernier message: 05/06/2006, 10h26
  3. Réponses: 6
    Dernier message: 19/12/2005, 13h41
  4. Réponses: 5
    Dernier message: 13/07/2005, 10h03
  5. Réponses: 4
    Dernier message: 15/12/2002, 04h19

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