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 :

Variables inexistantes passées par référence


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Points : 68
    Points
    68
    Par défaut Variables inexistantes passées par référence
    Bonjour à tous!

    Je vous laisse constater le problème par vous-même:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $arr=array();
    function test(&$value){}
     
    test($arr["mauvaise_clef"]);
     
    while ($el=each($arr)){
    echo $el["key"]."<br>";
    }
    Ce code affiche "mauvaise_clef"
    Apparemment passer une variable par référnce la crée si elle n'existe pas. Elle est NULL et ne passe pas le test du isset, mais existe et est repérée par exemple avec each...
    Quelqu'un aurait une solution à ce pb? J'ai essayé un unset dans la fonction test mais rien n'y fait.

    Si cela vous intrigue, j'en ai besoin car j'ai crée une fonction pour voir si une variable existe et renvoyer une valeur par défaut sinon (mais je ne veux pas que la variable soit créée )

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 226
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 226
    Points : 8 485
    Points
    8 485
    Billets dans le blog
    17
    Par défaut
    Hello,
    Je ne comprends pas ton problème. Peux-tu l'illustrer avec une portion de code FONCTIONNELLE en donnant le résultat obtenu et celui attendu.
    A+

  3. #3
    Membre régulier Avatar de B.Moncef
    Étudiant
    Inscrit en
    Août 2007
    Messages
    75
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2007
    Messages : 75
    Points : 88
    Points
    88
    Par défaut
    Bonjour,

    Son problème est que $arr['mauvaise_clef'] n'existe pas, il ne la définie nul part dans son script.

    Mais quand il l'envoie en tant que paramètre par référence à une fonction, elle est créée automatiquement.

    Pourrait-on savoir ce que vaut $el['value'] ? à moins d'une subtilité que je n'ai pas saisi, ça me semble être un bug PHP.

  4. #4
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Ce n'est pas un bug.
    Note: Si vous assigner, passer ou retourner une variable indéfinie par référence, elle sera créée.
    http://docs.php.net/manual/fr/langua...ces.whatdo.php

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par B.Moncef Voir le message
    Pourrait-on savoir ce que vaut $el['value'] ? à moins d'une subtilité que je n'ai pas saisi, ça me semble être un bug PHP.
    La variable $el['value'] est de type NULL

    Citation Envoyé par sabotage Voir le message
    Oui voila (je n'avais pas encore trouvé de doc la-dessus). Ca dépend de ce qu'on appelle "bug". On va dire que c'est un "bug officiel"
    Bon et moi ca m'embêtes bien car pas moyen d'y remédier

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 226
    Points : 8 485
    Points
    8 485
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par lysandre Voir le message
    ca m'embêtes bien car pas moyen d'y remédier
    Pt-être bien que si si on savait ce que tu veux faire au final

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux utiliser isset avant de passer d'appeller la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (isset($arr["mauvaise_clef"])) {
        test($arr["mauvaise_clef"]);
    }

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 193
    Points : 68
    Points
    68
    Par défaut
    Citation Envoyé par Séb. Voir le message
    Pt-être bien que si si on savait ce que tu veux faire au final
    Ben ce que j'ai dit, créer une fonction pour voir si une variable existe et renvoyer une valeur par défaut sinon
    Cette fonction appartiens à une classe, et doit aussi changer la valeur d'un membre de cette classe (une variable contenant le code de l'erreur)

    Citation Envoyé par sabotage Voir le message
    Tu peux utiliser isset avant de passer d'appeller la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (isset($arr["mauvaise_clef"])) {
        test($arr["mauvaise_clef"]);
    }
    Je préfères mettre tout dans une fonction pour que ce soit plus compact.
    Par exemple si j'appelle la fonction "exists", au lieu d'écrire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if (isset($var)){
    $string="blablabla".$var."blobloblo";
    } else {
    $string="blablabla".$default."blobloblo";
    $errcode=1;
    }
    ou même

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $string="blablabla".(isset($var) ? $var : $default)."blobloblo";
    if (!isset($var)) $errcode=1;
    Il suffit d'ecrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string="blablabla".exists($var)."blobloblo";
    ou il ne sera même pas nécessaire de spécifier la variable $default dans bcp de cas car ce sera une variable optionnelle de la fonction exists

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function exists($var,$default=""){
    global $errcode;
    if (!isset($var)) $errcode=1;
    return isset($var) ? $var : $default;
    }
    Mais bon laissez tomber je crois qu'il n'y a pas de solution, il faudra que je mette du code hors de la fonction. Merci pour vos aides!

Discussions similaires

  1. [RegEx] Récupération variable passé par référence
    Par Aurélien LEQUOY dans le forum Langage
    Réponses: 3
    Dernier message: 11/06/2013, 09h09
  2. Réponses: 3
    Dernier message: 15/05/2010, 15h13
  3. [VB.NET]Objet passé par référence
    Par olbi dans le forum VB.NET
    Réponses: 4
    Dernier message: 02/07/2007, 14h28
  4. [Tableaux] récuperer une variable tableau passé par URL
    Par molesqualeux dans le forum Langage
    Réponses: 2
    Dernier message: 23/12/2005, 01h12
  5. [POO] Problème de paramètre passé par référence
    Par dug dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 31/08/2005, 20h29

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