Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

vide mais pas is_null ni !isset

5 réponses
Avatar
Olivier Masson
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.

5 réponses

Avatar
Olivier Miakinen
Bonjour,

Le 07/07/2009 15:26, Olivier Masson a écrit :

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 ?

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).
Avatar
Aurelgadjo
Olivier Miakinen a écrit :
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 ?)
Avatar
Olivier Miakinen
Le 07/07/2009 16:08, Aurelgadjo me répondait :

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).

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().

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.
Avatar
Aurelgadjo
Olivier Miakinen a écrit :
...



Merci :)
Avatar
Olivier Masson
Olivier Miakinen a écrit :
Bonjour,

Le 07/07/2009 15:26, Olivier Masson a écrit :
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.


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.