variable NULL = zéro?

variable NULL = zéro? - PHP - Programmation

Marsh Posté le 29-10-2014 à 14:53:28    

Bonjour à tous!
 
Je débute dans la programmation en PHP et je suis actuellement un petit tutoriel pour l'apprendre.
 
Je suis actuellement au chapitre "If...Elseif...Else" et je me retrouve bloqué en essayant de mettre en application ce que j'ai appris.
 
Je veux utiliser trois variables qui sont $age et $sexe et $Aut_entrer, en fonction de ces variables, adapter le message d'accueil et autoriser ou non l'accès au site (enfin, théoriquement puisque ça aura un impact sur du texte uniquement).
 
Voici mon code :
 

Code :
  1. <?php
  2. $age = NULL ;
  3. $sexe = "";
  4. echo 'Tu as '.$age.' ans et tu est une '.$sexe.'<br />';
  5. If($age<=12 && $sexe=="M" )
  6. {
  7. echo "Salut mon petit!";
  8. $Aut_entrer = "Oui";
  9. }
  10. Elseif($age<=12 && $sexe=="F" )
  11. {
  12. echo "Salut ma petite!";
  13. $Aut_entrer = "Oui";
  14. }
  15. Elseif($age<=12 && $sexe== NULL)
  16. {
  17. echo "Salut!";
  18. $Aut_entrer = "Oui";
  19. }
  20. Elseif($age>=12 && $sexe=="M" )
  21. {
  22. echo "Salut mon grand!";
  23. $Aut_entrer = "Non";
  24. }
  25. Elseif($age>=12 && $sexe=="F" )
  26. {
  27. echo "Salut ma grande!";
  28. $Aut_entrer = "Non";
  29. }
  30. Elseif($age>=12 && $sexe==NULL)
  31. {
  32. echo "Salut!";
  33. $Aut_entrer = "Non";
  34. }
  35. Elseif($age==NULL && $sexe==NULL)
  36. {
  37. echo "Salut extra-terrestre!";
  38. $Aut_entrer = "Non";
  39. }
  40. echo '<br />Pouvez-vous entrer sur ce site? <br /> '.$Aut_entrer.'';
  41. ?>


 
 
Je devrais théoriquement voir apparaître sur mon site :
 

Citation :

Tu as ans et tu est une  
Salut extra-terrestre!
Pouvez-vous entrer sur ce site?  
Non


 
Alors que ceci s'affiche :

Citation :

Tu as ans et tu est une  
Salut!
Pouvez-vous entrer sur ce site?  
Oui


 
Le code comprend donc que la variable $age est inférieur à 12 avec $sexe NULL alors que je veux qu'elle comprenne que la variable $age est NULL.
Une variable NULL est-elle donc forcement considérée comme un 0 (et donc comme étant <=12?) ou y a-t-il une erreur quelque part dans mon code?
 
Merci par avance! =)

Reply

Marsh Posté le 29-10-2014 à 14:53:28   

Reply

Marsh Posté le 29-10-2014 à 15:12:40    

Bienvenue dans le monde merveilleux du php.
Le plus simple est de commencer par gérer les cas a nul et ensuite tu gère els cas ou tu as des valeur exploitables


---------------

Reply

Marsh Posté le 29-10-2014 à 15:17:28    

NULL en général n'est pas une valeur mais une propriété. il ne faut jamais tester variable == NULL car tu peux avoir une variable à NULL avec une valeur quelquonque.

Reply

Marsh Posté le 29-10-2014 à 15:24:44    

wat ?


---------------

Reply

Marsh Posté le 29-10-2014 à 15:26:57    

En php, t'as is_null(), isset() et empty(). is_null() vérifie si la variable en paramètre vaut NULL. isset() vérifie si la variable a été définie. empty() vérifie si la variable passée en paramètre vaut 0, NULL, chaîne vide ou tableau vide.
 
Par ailleurs, y'a une différence entre le test == et ===.
$var = 1;
if ($var == true) et if ($var == 1) renverront VRAI
if ($var === true) et if ($var === 1) renverront FAUX et VRAI.
 
=== vérifie le typage ET la valeur. == vérifie que la valeur.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 29-10-2014 à 15:29:43    

par contre, il ne me semble pas qu'il y ait un opérateur exact pour dire entier ET inférieur ( un genre de <== )


---------------

Reply

Marsh Posté le 29-10-2014 à 15:58:32    

Non, je confirme. Par contre, t'as is_integer() / is_int().
 
Edit : opérateurs en php : http://be2.php.net/manual/fr/langu [...] arison.php


Message édité par rufo le 29-10-2014 à 16:01:10

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 29-10-2014 à 15:58:41    

flo850 a écrit :

Bienvenue dans le monde merveilleux du php.
Le plus simple est de commencer par gérer les cas a nul et ensuite tu gère els cas ou tu as des valeur exploitables


 
Effectivement, j'ai fais passer les conditions avec NULL avant le reste et tout semble fonctionner!
Par contre, du coup, je ne comprend pas trop pourquoi cela ne fonctionnais pas dans ma précédente version?...
 

Citation :

NULL en général n'est pas une valeur mais une propriété. il ne faut jamais tester variable == NULL car tu peux avoir une variable à NULL avec une valeur quelquonque.


 
J'ai du mal a comprendre... Comment un varible NULL peut avoir une valeur puisqu'elle est nulle?
Je n'ai pas encore acquis une quelconque notion de paramètre à mon niveau actuel d'apprentissage. Je comprendrais peut-être plus tard... =)
 

Citation :

En php, t'as is_null(), isset() et empty(). is_null() vérifie si la variable en paramètre vaut NULL. isset() vérifie si la variable a été définie. empty() vérifie si la variable passée en paramètre vaut 0, NULL, chaîne vide ou tableau vide.  
 
Par ailleurs, y'a une différence entre le test == et ===.  
$var = 1;  
if ($var == true) et if ($var == 1) renverront VRAI  
if ($var === true) et if ($var === 1) renverront FAUX et VRAI.  
 
=== vérifie le typage ET la valeur. == vérifie que la valeur.


 
La je suis complètement perdu! ^^'
Vous me parlez de pas mal de choses que je n'ai pas apprise pour le moment donc je n'ai pas trop compris votre message. J'apprécie cependant votre aide et j'y regarderais de plus près dès que ces notions seront assimilées!
Pour le moment, je n'en suis qu'à la partie If...Elseif...Else =)
 
 
Merci à tous pour vos réponses en tout cas!

Reply

Marsh Posté le 29-10-2014 à 17:14:40    


une variable nulle n'a pas de valeur. mais comme le vide n'existe pas en  mémoire, il ne faut pas comparer une variable qui est nulle, sinon on peut avoir des résultats bizarres

Reply

Marsh Posté le 29-10-2014 à 17:28:58    

non pas de résultat bizarre avec is_null() fait pour les variables ayant la valeur NULL ou isset() avec les variables non définies...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 29-10-2014 à 17:28:58   

Reply

Marsh Posté le 30-10-2014 à 11:40:43    

c'est ce que je dis. NULL n'est pas une valeur de la variable, mais une propriété. mais comme une zone mémoire n'est jamais vide, il y a une valeur mais qui ne veut rien dire. si on compare une variable qui est à NULL on a des résultats incohérents forcément !

Reply

Marsh Posté le 30-10-2014 à 14:18:46    

La différence entre la valeur d'une donnée et son état nul/non null est un piège classique pour les débutants.
Pour comprendre, on peut faire l'analogie avec un être humain, en disant que sa valeur serait sa taille, et qu'il serait "nul" s'il est mort et non nul s'il est vivant. On voit qu'on peut avoir une taille différente de zéro, même si on est mort.
Par ailleurs, le PHP fait des conversions implicites, comme le Basic et d'autres langages. Donc, quand il voit le mot "NULL" il le convertit en la valeur zéro. Il faut donc utiliser 3 signes égal à la suite (comme c'est dit fort justement précédemment) pour faire un test sur l'état NULL ou pas (et c'est pareil pour TRUE et FALSE), parce que si on fait un test avec seulement 2 signes égal, alors il s'agit d'une comparaison qui porte sur la valeur zéro ou non (à cause de la conversion implicite), et pas sur l'état (je préfère le mot "état" plutôt que "propriété" (parce qu'on pourrait dire qu'une valeur est aussi une propriété, alors que ce n'est pas un état), mais c'est la même idée).

Message cité 1 fois
Message édité par billgatesanonym le 30-10-2014 à 14:27:33
Reply

Marsh Posté le 01-11-2014 à 12:55:07    

billgatesanonym a écrit :

La différence entre la valeur d'une donnée et son état nul/non null est un piège classique pour les débutants.
Pour comprendre, on peut faire l'analogie avec un être humain, en disant que sa valeur serait sa taille, et qu'il serait "nul" s'il est mort et non nul s'il est vivant. On voit qu'on peut avoir une taille différente de zéro, même si on est mort.
Par ailleurs, le PHP fait des conversions implicites, comme le Basic et d'autres langages. Donc, quand il voit le mot "NULL" il le convertit en la valeur zéro. Il faut donc utiliser 3 signes égal à la suite (comme c'est dit fort justement précédemment) pour faire un test sur l'état NULL ou pas (et c'est pareil pour TRUE et FALSE), parce que si on fait un test avec seulement 2 signes égal, alors il s'agit d'une comparaison qui porte sur la valeur zéro ou non (à cause de la conversion implicite), et pas sur l'état (je préfère le mot "état" plutôt que "propriété" (parce qu'on pourrait dire qu'une valeur est aussi une propriété, alors que ce n'est pas un état), mais c'est la même idée).


 
La métaphore m'a bien aidé a cerner le problème. Du coup, dans mon code, le fait d'avoir utiliser le test avec "==", NULL revient bel et bien à "0". Je voulais définir par NULL, l'absence de valeur, ce qui, du coup, n'est pas correct.
 
En remplaçant $Age=NULL par $Age="", il faut donc bien mettre en premier les tests sur les valeurs vides sinon, j’obtiens une erreur. Ce qui me semble logique vu que je demande de comparer des valeurs de variable qui n'ont pas de valeur (ma tête chauffe un peu mais je tien le coup! ^^)
 
Edit : Ah bah non, en apposant une valeur vide ($Age="" ), j'obtient encore une valeur de 0 sur mes tests... Je comprend pas! T_T
 

Citation :

Il sert à quoi ce code, s'il n'y a pas de GET de variables entrées par un utilisateur lambda ?  [:transparency]
 
Je passe sur le NULL et les tests de variables, mais je ne comprends pas l'idée de ce code qui tourne dans le vide vu que les variables sont déclarées nulles ou vides et que les tests (if, elseif, etc) ne se font sur rien de ... variable !


 
Tu as raison, il ne sert strictement à rien... sauf pour moi! Comme je l'ai expliqué, c'est un code d'exercice qui me permet de mettre en pratique les conditions en PHP.
 
Je choisi 2 variables, je met les test et après je changes moi-même les valeurs des variables pour comprendre le mécanisme des condions.
 
Ça m'a d'ailleurs beaucoup appris grâce à toutes les réponses que j'ai eu sur ce post. Encore merci à vous! =)


Message édité par mazzella le 01-11-2014 à 13:17:33
Reply

Marsh Posté le 03-11-2014 à 09:11:38    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed