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

Affichage des résultats du sondage: Déclarer vous systématiquement vos variables?

Votants
18. Vous ne pouvez pas participer à ce sondage.
  • Oui, toujours

    8 44,44%
  • Oui, quand j'utilise cette variable qui aura un résultat uniquement sur une condition

    5 27,78%
  • Non, Jamais

    4 22,22%
  • C'est quoi une variable?

    1 5,56%
Langage PHP Discussion :

Faut il déclarer des variables ?


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Par défaut Faut il déclarer des variables ?
    Bonjour,

    Chacun d'entre nous a pris l'habitude je pense de profiter de la souplesse de PHP, pour commencer à utiliser des variables sans les déclarer.

    Je parle de variables standars type $variable. (Pas de POST ou GET...)

    Du coup, avec un debug mis sur ALL, et dans le cas, d'une utilisation avec variable, on va se retrouver avec des erreurs style UNDEFINED VARIABLE.

    Ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if(1==2){$var = "Bin non!";}
    echo "Alors? : ".$var;
    Si la condition n'est pas remplie, on aura l'erreur.

    Alors on a tous l'habitude de mettre le notice_error à 2039.

    Mais du coup, on va générer de gros fichier d'erreurs sur nos serveurs, et je pars du principe que si on a une erreur, c'est que l'on a pas bien fais les choses.

    D'ou ma question, doit on prendre l'habitude de déclarer notre variable, même si on ne lui fait pas de settype, un peu inutile dans 99% des cas.

    Doit on faire un $var=""; ou $var=0 ou var=array(); à chaque fois?

    Vos avis?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Perso oui je les déclarent. Sauf lorsque se sont des variables "tampons" ou a un usage très particulier comme par exemple une variable d'incrémentation dans une boucle.

    Et dans la même veine le niveau d'erreur est toujours placé à E_STRICT ou E_ALL (je ne sais plus), m'enfin le plus sévère.

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 56
    Par défaut
    Il te suffit de tester ta variable avant de l'afficher et ton code php sera propre

  4. #4
    mon_nom_est_personne
    Invité(e)
    Par défaut
    je els declare toujours car c'est plus facile pour la maintenance.

  5. #5
    Membre confirmé Avatar de TwAzO
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 67
    Par défaut
    Pour éviter un maximum de problèmes, je pense qu'il vaut largement mieux les déclarer.

    Le code source est ainsi plus compréhensible (et propre, en passant )

  6. #6
    Membre éclairé Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Par défaut
    J'ai donc finalement commencer par tout déclarer, contrairement à avant.

    J'ai du coup règlé mon php.ini sur E_ALL pour l'affichage des erreurs.

    Comment ai je pu faire sans avant.

    Ca ne coute pas très cher en termes de temps, et ca permet de tout de suite voir des incohérences dans le code.

    Merci pour vos commentaires.

  7. #7
    mon_nom_est_personne
    Invité(e)
    Par défaut
    si en plus tu commente ton code et que met des nom de variable explicite, 6 mois apres tu pourras te remettre dans ton code sans souci.
    la souplesse de php est super, mais quand on bosse sur des grosses appli avec plein d'objet dans tout les sens etc... mieux vaut savoir qui est quoi des le depart.
    Et puis ca depend aussi de comment t'as appris la prog, j'ai commence avec turbo pascal (ct y'a looooooongtemps) donc j'ai toujours garder la structure de code suivante:

    1. include (ca aide a pas etre surpris quand on vois $classExotique->methode)
    2. variable et constant
    3. code pur
    4. detruit les variables et les objets (ca reduit le server load sur les projet a tres forte frequentation)

  8. #8
    Membre éclairé Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Par défaut
    j'ai appris avec la pratique....

  9. #9
    Membre éprouvé Avatar de SirDarken
    Profil pro
    Développeur Web
    Inscrit en
    Février 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Février 2004
    Messages : 897
    Par défaut
    Je dirai que ca dépend de ce que j'ai à faire.
    Un petit site ou traitement non, un plus gros truc oui je commente et déclare avant chaque variable.

    Grosso modo si une fonction ou bout de code (comprenez bout de code qui fait 1 seul truc) dépassé l'ecran d'affichage je commente et déclare, si j'ai 3 bouts de code sur 1 affichage, non.

  10. #10
    Membre éclairé Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Par défaut
    Petit question.

    J'ai une fonction qui doit traiter des FLOAT.

    Je pensait faire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function test($valeur){
    $valeur = (float)$valeur;
    etc.....
    }
    Ceci afin de m'assurer que ce qui était envoyé à la fonction était bien des float, dès fois que je me trompe sur un appel.

    est ce que cela est correct?

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Par défaut
    Pour ta question, moi je testerai ta variable avant l'appel avec une fonction comme is_float(). Si celle-ci renvoie false, je ferai, en effet, un cast (ou utiliserai floatval()) et lancerai l'appel de la fonction.
    Pour en revenir à ton sujet, j'ai fait 4 ans de C et de C++ avant de commencer à coder en PHP. L'adaptation dans ce sens s'est faite très rapidement mais le contraire... c'est autre chose. C'est pourquoi j'ai repris mes bonnes vieilles habitudes de tout déclarer et tout initialiser!

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Par défaut
    Salut,

    Moi je forcerais le type, comme toi.
    Mais sur les nombres à virgule c'est un peu tendancieux...
    La question que je me pose c'est si j'envoie 3.33333333...3333.333 et que je le cast en float, sera t'il être arrondi ? Oui ? non ?
    En tout cas sa à son importance.
    Mais c'est spécifique à ce type de données pour les entiers, les chaines ect le problème ne se pose pas.

    bye

  13. #13
    Membre éclairé Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Par défaut
    ok, merci pour vos réponses, je vais donc concerver ma méthode.

    Par contre en effet, c'est un gros problème pour moi.

    Autant le (float), le settype, ou le floatval() arrondissent apparement à la 8 ème décimale.

    Comment puis je m'y prendre pour convertir un string en float sans l'arrondir?



    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $var = "1.12345678910111213";
     
    echo "STRING: ".$var."<br>";
     
    echo "FLOAT A: ".(float)$var."<br>";
     
    echo "FLOAT B: ".floatval($var)."<br>";
     
    settype($var, "float");
    echo "FLOAT C: ".$var."<br>";
    retourne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    STRING: 1.12345678910111213
    FLOAT A: 1.1234567891011
    FLOAT B: 1.1234567891011
    FLOAT C: 1.1234567891011

    Et encore pire, si je prends un chiffre avec plus de nombre avant la virgule:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $var = "987654321.12345678910111213";
     
    echo "STRING: ".$var."<br>";
     
    echo "FLOAT A: ".(float)$var."<br>";
     
    echo "FLOAT B: ".floatval($var)."<br>";
     
    settype($var, "float");
    echo "FLOAT C: ".$var."<br>";
    retourne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    STRING: 987654321.12345678910111213
    FLOAT A: 987654321.12346
    FLOAT B: 987654321.12346
    FLOAT C: 987654321.12346

    Soit apparement, une conversion à 14 nombres maximum.


    Et un petit dernier pour la route:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $var = "121110987654321.12345678910111213";
     
    echo "STRING: ".$var."<br>";
     
    echo "FLOAT A: ".(float)$var."<br>";
     
    echo "FLOAT B: ".floatval($var)."<br>";
     
    settype($var, "float");
    echo "FLOAT C: ".$var."<br>";
    retourne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    STRING: 121110987654321.12345678910111213
    FLOAT A: 1.2111098765432E+014
    FLOAT B: 1.2111098765432E+014
    FLOAT C: 1.2111098765432E+014

  14. #14
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Par défaut
    Es-tu obligé de convertir en float? Je viens de découvrir les fonctions BC Math qui permettent des opérations sur des grands nombres

  15. #15
    Membre éclairé Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Par défaut
    Je viens de voir tes fonctions BC MATH.
    Bien que ceci a l'air pas mal, j'aurai vraiment préféré convertir mes variables.

    Ca me permettrait de savoir ce que retourne mes fonctions et faciliterait beaucoup de choses.

    Il semblerait que ca arrondisse également:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $varA = "1.12345678910111213";
    $varB = "195846.12358746955412";
     
    echo bcadd($varA, $varB);
    retourne: 195847

    EDIT: Pardon, je n'avais pas vu le parametre SCALE.

  16. #16
    Membre chevronné
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 498
    Par défaut
    et si tu précises le nombre de décimales en 3ème paramètre?

  17. #17
    Membre éclairé Avatar de hugo69
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    512
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 512
    Par défaut
    Oui, pardon, je n'avais pas vu le scale.

    Cette méthode a l'air de fonctionner, mais ce n'est vraiment pas celle que je préfère.

    Impossible de convertir avec précision il semblerait selon la doc???

Discussions similaires

  1. Déclarer des variables globales
    Par Jinx_ dans le forum Débuter
    Réponses: 11
    Dernier message: 15/02/2008, 14h07
  2. [Debutant]Comment déclarer des variables dans un fichier a part
    Par megapacman dans le forum Général Java
    Réponses: 14
    Dernier message: 14/01/2008, 14h32
  3. [Débutant] Comment déclarer des variables et un vecteur ?
    Par valanscu77 dans le forum Assembleur
    Réponses: 4
    Dernier message: 27/03/2007, 19h25
  4. Déclarer des variables inférieures à 8 bits
    Par the_ionic dans le forum C
    Réponses: 7
    Dernier message: 07/02/2007, 10h40
  5. [AS2] déclarer des variables dans une fonction
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 12
    Dernier message: 02/08/2005, 13h50

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