Et "septembre", il sortait d'ou ? Moi, je n'ai toujours pas trouvé l'énigme...
A moins d'une blague avec changement de mois sur la machine...
Yop, je sais pas trop, faut voir du coté de l'auto cas de php je pense
parce que
if ('$date_m' ==01) $date_m2 = 'janvier';
if ('$date_m' ==02) $date_m2 = 'février';
if ('$date_m' ==03) $date_m2 = 'mars';
if ('$date_m' ==04) $date_m2 = 'avril';
if ('$date_m' ==05) $date_m2 = 'mai';
if ('$date_m' ==06) $date_m2 = 'juin';
if ('$date_m' ==07) $date_m2 = 'juillet';
if ('$date_m' ==08) $date_m2 = 'aout';
if ('$date_m' ==09) $date_m2 = 'septembre';
if ('$date_m' ==10) $date_m2 = 'octobre';
if ('$date_m' ==11) $date_m2 = 'novembre';
if ('$date_m' ==12) $date_m2 = 'decembre';
s'il fournit septembre ça veux dire que l'auto cast considère que la chaîne '$date_m' est égale à 09 (sans tenir compte du type donc)
avec un test simple
<?php
$chaine = '$date_m';
$chainecast = (int)$chaine;
$chiffre = 9;
echo '<pre>';
debug_zval_dump($chaine);
echo '</pre><hr />';
echo '<pre>';
debug_zval_dump($chainecast);
echo '</pre><hr />';
echo '<pre>';
debug_zval_dump($chiffre);
echo '</pre><hr />';
if ('$date_m' == $chiffre)
echo 'ouch';
else
echo 'ça va !';
le résultat est
string(7) "$date_m" refcount(2)
long(0) refcount(2)
long(0) refcount(2)
ouch
donc php stock bien le premier en chaîne de caractères.
et le chiffre en long mais il ne garde que zéro comme valeur (je ne sais pas pourquoi)
Le cast de la chaine de caractère en entier retourne zéro (je ne sais pas pourquoi non plus)
Donc le test compare une chaîne de caractère à zéro, ce qui revient avec, l'auto cast à comparer zéro avec zéro.
le test est donc vrai
Maintenant pourquoi septembre ?
c'est simple.
Le teste est vrai pour
tout les cas de janvier à septembre, car à chaque fois la zval contient
zéro ! (ceci a cause du zéro en tête).
les tests étant fait tous les un à la suite des autres date_m2 passe successivement de janvier à septembre.
pour les trois derniers mois, on compare 10, 11 ou 12 à zéro. ces tests ne peuvent pas être vrai.
Le problème ici est lié
- à une mauvaise utilisation de la syntaxe php : d'une manière générale il ne faut pas mettre des variables dans les chaines de caractères. la preuve ici au lieu de " angela à utilisée des ' et ça fou la merde. la concaténation sert à ça, de plus même "$var" n'est pas défendable, aucun intérêt de faire fonctionner le parse de chaîne de caractère pour rien

- A un cast, qui peux se comprendre, une chaine de caractère ce n'est pas un chiffre, cette chaine ne commence pas par un chiffre, donc valeur par défaut zéro !
voila pourquoi septembre
Si tu veux t'en convaincre utilise un debugguer et regarde où passe le script
C'est pour cela que souvent les gens préfères les systèmes typé y a moins de soucis de se genre
@+
[quote="Mazarini"]Et "septembre", il sortait d'ou ? Moi, je n'ai toujours pas trouvé l'énigme...
A moins d'une blague avec changement de mois sur la machine...[/quote]
Yop, je sais pas trop, faut voir du coté de l'auto cas de php je pense
parce que
[php]if ('$date_m' ==01) $date_m2 = 'janvier';
if ('$date_m' ==02) $date_m2 = 'février';
if ('$date_m' ==03) $date_m2 = 'mars';
if ('$date_m' ==04) $date_m2 = 'avril';
if ('$date_m' ==05) $date_m2 = 'mai';
if ('$date_m' ==06) $date_m2 = 'juin';
if ('$date_m' ==07) $date_m2 = 'juillet';
if ('$date_m' ==08) $date_m2 = 'aout';
if ('$date_m' ==09) $date_m2 = 'septembre';
if ('$date_m' ==10) $date_m2 = 'octobre';
if ('$date_m' ==11) $date_m2 = 'novembre';
if ('$date_m' ==12) $date_m2 = 'decembre';[/php]
s'il fournit septembre ça veux dire que l'auto cast considère que la chaîne '$date_m' est égale à 09 (sans tenir compte du type donc)
avec un test simple
[php]<?php
$chaine = '$date_m';
$chainecast = (int)$chaine;
$chiffre = 9;
echo '<pre>';
debug_zval_dump($chaine);
echo '</pre><hr />';
echo '<pre>';
debug_zval_dump($chainecast);
echo '</pre><hr />';
echo '<pre>';
debug_zval_dump($chiffre);
echo '</pre><hr />';
if ('$date_m' == $chiffre)
echo 'ouch';
else
echo 'ça va !';[/php]
le résultat est
[quote]
string(7) "$date_m" refcount(2)
long(0) refcount(2)
long(0) refcount(2)
ouch[/quote]
donc php stock bien le premier en chaîne de caractères.
et le chiffre en long mais il ne garde que zéro comme valeur (je ne sais pas pourquoi)
Le cast de la chaine de caractère en entier retourne zéro (je ne sais pas pourquoi non plus)
Donc le test compare une chaîne de caractère à zéro, ce qui revient avec, l'auto cast à comparer zéro avec zéro.
le test est donc vrai :)
Maintenant pourquoi septembre ?
c'est simple.
Le teste est vrai pour [b]tout[/b] les cas de janvier à septembre, car à chaque fois la zval contient [b]zéro [/b]! (ceci a cause du zéro en tête).
les tests étant fait tous les un à la suite des autres date_m2 passe successivement de janvier à septembre.
pour les trois derniers mois, on compare 10, 11 ou 12 à zéro. ces tests ne peuvent pas être vrai.
Le problème ici est lié
- à une mauvaise utilisation de la syntaxe php : d'une manière générale il ne faut pas mettre des variables dans les chaines de caractères. la preuve ici au lieu de " angela à utilisée des ' et ça fou la merde. la concaténation sert à ça, de plus même "$var" n'est pas défendable, aucun intérêt de faire fonctionner le parse de chaîne de caractère pour rien :)
- A un cast, qui peux se comprendre, une chaine de caractère ce n'est pas un chiffre, cette chaine ne commence pas par un chiffre, donc valeur par défaut zéro !
voila pourquoi septembre :)
Si tu veux t'en convaincre utilise un debugguer et regarde où passe le script :)
C'est pour cela que souvent les gens préfères les systèmes typé y a moins de soucis de se genre :)
@+