Matthieu Marcillaud | 20 Jul 15:30

[(#VAL{0}|intval|=={chaine})] renvoie 1...

Hello

Goetsu a trouvé un bug(?) tout à l'heure...
Un #ENV{*texte}|=={toto} retourne vrai si $texte = int(0).

De la même manière :
[(#VAL{0}|intval|=={chaine})] renvoie 1...

Jeu de test pour vérifier (à mettre dans les tests unitaires ensuite si 
valides ?) :

<br />
[(#VAL{0}|var_dump)] -> string(1) "0"<br />
[(#VAL{0}|intval|var_dump)] -> int(0)<br /><br />

(condition -> retour attendu : erreur)<br />
[(#VAL{0}|intval|=={a})] -> rien : ERREUR retourne 1<br />
[(#VAL{0}|intval|=={0})] -> 1<br />
[(#VAL{0}|intval|=={1})] -> rien<br />
[(#VAL{0}|intval|=={2})] -> rien<br /><br />

[(#VAL{0}|=={a})] -> rien<br />
[(#VAL{0}|=={0})] -> 1<br />
[(#VAL{0}|=={1})] -> rien<br />
[(#VAL{0}|=={2})] -> rien<br /><br />

[(#VAL{0}|=={'a'})] -> rien<br />
[(#VAL{0}|=={'0'})] -> 1<br />
[(#VAL{0}|=={'1'})] -> rien<br />
[(#VAL{0}|=={'2'})] -> rien<br /><br />
(Continue reading)

Fil | 20 Jul 22:02

Re: [(#VAL{0}|intval|=={chaine})] renvoie 1...

> Goetsu a trouvé un bug(?) tout à l'heure...

c'est une "feature" de php

http://www.php.net/operators.comparison

 Si vous comparez un entier avec une chaîne, la chaîne est convertie
en un nombre. Si vous comparez deux chaînes numériques, elles seront
comparées en tant qu'entiers. Ces règles s'appliquent aussi à
l'instruction switch.
<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("1" == "1e0"); // 1 == 1 -> true

-- Fil
Matthieu Marcillaud | 20 Jul 22:16

Re: [(#VAL{0}|intval|=={chaine})] renvoie 1...

Fil a écrit :
>> Goetsu a trouvé un bug(?) tout à l'heure...
> 
> c'est une "feature" de php
> 
> http://www.php.net/operators.comparison

Merci Fil.
Je la connaissais pas celle là... sympa...

--

-- 
MM.

JLuc | 21 Jul 07:39

Re: [(#VAL{0}|intval|=={chaine})] renvoie 1...

Fil a écrit :
>> Goetsu a trouvé un bug(?) tout à l'heure...
> 
> c'est une "feature" de php
> 
> http://www.php.net/operators.comparison
> 
>  Si vous comparez un entier avec une chaîne, la chaîne est convertie
> en un nombre. Si vous comparez deux chaînes numériques, elles seront
> comparées en tant qu'entiers. Ces règles s'appliquent aussi à
> l'instruction switch.
> <?php
> var_dump(0 == "a"); // 0 == 0 -> true
> var_dump("1" == "01"); // 1 == 1 -> true
> var_dump("1" == "1e0"); // 1 == 1 -> true

et de manière cohérente, "" est considéré comme false...
JL

aurélien levy | 21 Jul 09:02

Re: [(#VAL{0}|intval|=={chaine})] renvoie 1...

Donc si je  comprend bien je peux continuer à utiliser strval ?
(même si ne comprend pas bien l'intérêt d'un feature qui renvoie true qd 
on test si  0=="a")

Aurélien
>>
>> c'est une "feature" de php
>>
>> http://www.php.net/operators.comparison
>>
>>  Si vous comparez un entier avec une chaîne, la chaîne est convertie
>> en un nombre. Si vous comparez deux chaînes numériques, elles seront
>> comparées en tant qu'entiers. Ces règles s'appliquent aussi à
>> l'instruction switch.
>> <?php
>> var_dump(0 == "a"); // 0 == 0 -> true
>> var_dump("1" == "01"); // 1 == 1 -> true
>> var_dump("1" == "1e0"); // 1 == 1 -> true
>
> et de manière cohérente, "" est considéré comme false...
> JL
>
> _______________________________________________
> liste: http://listes.rezo.net/mailman/listinfo/spip-dev
> doc: http://www.spip.net/
> dev: http://trac.rezo.net/trac/spip/
> irc://irc.freenode.net/spip
>
>

(Continue reading)

Re: [(#VAL{0}|intval|=={chaine})] renvoie 1...

en php on a === pour les cas ou l'on veut tester "egal en valeur et  
de meme type"
En l'occurence :
0=='a' => true
0==='a' => false

On peut l'ajouter aux filtres spip comme ==, mais cela risque  
d'embrouiller les newbies qui tomberont dessus ...
Cédric

Le 21 juil. 08 à 09:02, aurélien levy a écrit :

> Donc si je  comprend bien je peux continuer à utiliser strval ?
> (même si ne comprend pas bien l'intérêt d'un feature qui renvoie  
> true qd on test si  0=="a")
>
> Aurélien
>>>
>>> c'est une "feature" de php
>>>
>>> http://www.php.net/operators.comparison
>>>
>>>  Si vous comparez un entier avec une chaîne, la chaîne est convertie
>>> en un nombre. Si vous comparez deux chaînes numériques, elles seront
>>> comparées en tant qu'entiers. Ces règles s'appliquent aussi à
>>> l'instruction switch.
>>> <?php
>>> var_dump(0 == "a"); // 0 == 0 -> true
>>> var_dump("1" == "01"); // 1 == 1 -> true
>>> var_dump("1" == "1e0"); // 1 == 1 -> true
(Continue reading)

aurelien levy | 21 Jul 11:12

Re: [(#VAL{0}|intval|=={chaine})] renvoie 1...

oui ou plus simplement indiquer dans le doc le comportement exacte du == 
et qu'il est possible d'utiliser strval pour contourner le problème

Aurélien
> en php on a === pour les cas ou l'on veut tester "egal en valeur et de 
> meme type"
> En l'occurence :
> 0=='a' => true
> 0==='a' => false
>
> On peut l'ajouter aux filtres spip comme ==, mais cela risque 
> d'embrouiller les newbies qui tomberont dessus ...
> Cédric


Gmane