Discussion:
vide mais pas is_null ni !isset
(trop ancien pour répondre)
Olivier Masson
2009-07-07 13:26:30 UTC
Permalink
Bonjour,

Pour une inclusion dans une base SQL, j'avais besoin de distinguer la
valeur 0 (zéro) d'une variable et la valeur NULL.

La variable à tester est issue d'un objet.
Je la type en string car en int il me convertit NULL en 0.
$a = (string)$obj->bidule;

Mais ensuite, j'ai du résoudre mon problème en testant ($a === '') car
ni !isset($a), ni is_null($a) ne renvoient TRUE.

Est-ce normal ?
Merci.
Olivier Miakinen
2009-07-07 13:35:11 UTC
Permalink
Bonjour,
Post by Olivier Masson
Pour une inclusion dans une base SQL, j'avais besoin de distinguer la
valeur 0 (zéro) d'une variable et la valeur NULL.
La variable à tester est issue d'un objet.
Je la type en string car en int il me convertit NULL en 0.
$a = (string)$obj->bidule;
Euh... et pourquoi as-tu besoin de changer son type ?
« $a = $obj->bidule; » ne convient pas ?
Post by Olivier Masson
Mais ensuite, j'ai du résoudre mon problème en testant ($a === '') car
ni !isset($a), ni is_null($a) ne renvoient TRUE.
Est-ce normal ?
Oui, c'est tout à fait normal. À partir du moment où tu lui as donné
une valeur de type string (transtypage en string de $obj->bidule), la
variable existe (d'où isset répond TRUE et !isset répond FALSE), et
elle est de type string et non de type null (d'où is_null répond FALSE).
Aurelgadjo
2009-07-07 14:08:16 UTC
Permalink
Post by Olivier Miakinen
Oui, c'est tout à fait normal. À partir du moment où tu lui as donné
une valeur de type string (transtypage en string de $obj->bidule), la
variable existe (d'où isset répond TRUE et !isset répond FALSE), et
elle est de type string et non de type null (d'où is_null répond FALSE).
Donc on peut dire que null est un type qui ne peut rien contenir ?
Quand je fais if($toto == null) , est-ce que dans ce cas je peux faire
if($toto == int) ?! (j'en doute mais ?)
Olivier Miakinen
2009-07-07 14:27:29 UTC
Permalink
Post by Aurelgadjo
Donc on peut dire que null est un type qui ne peut rien contenir ?
J'allais répondre la chose suivante : « le type null (ou NULL) est
un type qui ne peut contenir qu'une seule valeur, la valeur null (ou
NULL) ». Mais à la lecture de la doc il semble que ton interprétation
soit plus proche de la réalité que la mienne :
<http://fr.php.net/manual/en/language.types.null.php>
<http://fr.php.net/manual/fr/language.types.null.php>

Il y a pourtant une différence entre une variable non initialisée et
une ayant la valeur nulle, comme on peut le voir dans l'exemple #1 de
la page <http://fr.php.net/manual/fr/function.is-null.php> (seule la
première déclenche une erreur de type E_NOTICE).
Post by Aurelgadjo
Quand je fais if($toto == null) ,
... c'est en général équivalent à ($toto == '') ou ($toto == 0), à cause
des transtypages implicites avec la comparaison ==. Pour vraiment tester
la valeur null *et* le type null, il faut utiliser ===, ou bien la
fonction is_null().
Post by Aurelgadjo
est-ce que dans ce cas je peux faire
if($toto == int) ?!
Eh non ! Contrairement à null qui est à la fois un type et une valeur,
int n'est qu'un type. Mais tu as quelques fonctions telles que is_int(),
is_float() ou is_numeric() qui te permettent de faire ce genre de chose.
Aurelgadjo
2009-07-07 15:06:14 UTC
Permalink
...
Merci :)
Olivier Masson
2009-07-07 23:19:41 UTC
Permalink
Post by Olivier Masson
Bonjour,
Post by Olivier Masson
Pour une inclusion dans une base SQL, j'avais besoin de distinguer la
valeur 0 (zéro) d'une variable et la valeur NULL.
La variable à tester est issue d'un objet.
Je la type en string car en int il me convertit NULL en 0.
$a = (string)$obj->bidule;
Euh... et pourquoi as-tu besoin de changer son type ?
« $a = $obj->bidule; » ne convient pas ?
Euh... en fait, par précaution, je type toujours et là, c'était en
entier. Peut-être que sans rien ça fonctionne aussi, mais quand même pas
pour isset et is_null.
Post by Olivier Masson
Oui, c'est tout à fait normal. À partir du moment où tu lui as donné
une valeur de type string (transtypage en string de $obj->bidule), la
variable existe (d'où isset répond TRUE et !isset répond FALSE), et
elle est de type string et non de type null (d'où is_null répond FALSE).
En fait : " Une variable est considérée comme null si :
elle s'est vu assigner la constante NULL.
elle n'a pas encore reçu de valeur.
elle a été effacée avec la fonction unset().
".

Donc normal que is_null ne renvoie par true.
Pour isset, d'accord avec toi.

Continuer la lecture sur narkive:
Loading...