par
adri74100 » 29 juil. 2011, 08:17
Je rebondis sur la réponse : un string n'est pas converti en 0. D'après mes connaissances, les langages respectent globalement la même logique en transtypage, et le transtypage est permis partout. La différence de trouve au niveau du typage, s'il est fort ou non.
Par exemple, un langage fortement typé te proposera de caster (transtyper) un String vers un Integer. par exemple : int x = (int) str_nombre
Le but étant d'avoir un résultat logique, mettre 0 arbitrairement ne répondrait pas aux problématique (on ne transtype pas pour le plaisir). Si un utilisateur tape "53" dans un formulaire, le résultat côté serveur sera toujours un String. Il faut donc le transtyper pour agir dessus, et la régle générale que les langages ont choisie c'est de convertir tout ce qui se trouve avant une première lettre (en gros). Donc "53" deviendra 53, "85x" deviendra 85 et "abdel" deviendra 0.
Ce qui est drôle c'est que tu te défends sur ta propre question en donnant comme exemple du typage fort alors que leur réaction est similaire si ce n'est identique (mais mon expérience ne me permet pas d'affirmer qu'ils le sont).
Effectivement pour le transtypage des ints il est identique aux autres languages (encore heureux !) donc '1' vaudra 1, '1x' vaudra 1 et 'x' vaudra 0.
Et effectivement le comportement de php sera identique à un typage fort, si ce n'est que le type choisi lors d'une comparaison souple (==) de deux variables de types différents sera implicite: le type le plus restrictif (si je ne fais pas d'erreur).
- lors de la comparaison d'un string à un int, php castera le string en int
- lors de la comparaison d'un string à un booléen, php castera le string en booléen
Dans ma fonction donnée en exemple, j'aurais par exemple dû convertir manuellement ma variable de type mixed en string pour la comparaison, pour éviter que la présence d'un int force le cast du 'NOW()' en int, soit 0.
[quote="devlop78"]Je rebondis sur la réponse : un string n'est pas converti en 0. D'après mes connaissances, les langages respectent globalement la même logique en transtypage, et le transtypage est permis partout. La différence de trouve au niveau du typage, s'il est fort ou non.
Par exemple, un langage fortement typé te proposera de caster (transtyper) un String vers un Integer. par exemple : int x = (int) str_nombre
Le but étant d'avoir un résultat logique, mettre 0 arbitrairement ne répondrait pas aux problématique (on ne transtype pas pour le plaisir). Si un utilisateur tape "53" dans un formulaire, le résultat côté serveur sera toujours un String. Il faut donc le transtyper pour agir dessus, et la régle générale que les langages ont choisie c'est de convertir tout ce qui se trouve avant une première lettre (en gros). Donc "53" deviendra 53, "85x" deviendra 85 et "abdel" deviendra 0.
Ce qui est drôle c'est que tu te défends sur ta propre question en donnant comme exemple du typage fort alors que leur réaction est similaire si ce n'est identique (mais mon expérience ne me permet pas d'affirmer qu'ils le sont).[/quote]
Effectivement pour le transtypage des ints il est identique aux autres languages (encore heureux !) donc '1' vaudra 1, '1x' vaudra 1 et 'x' vaudra 0.
Et effectivement le comportement de php sera identique à un typage fort, si ce n'est que le type choisi lors d'une comparaison souple (==) de deux variables de types différents sera implicite: le type le plus restrictif (si je ne fais pas d'erreur).
- lors de la comparaison d'un string à un int, php castera le string en int
- lors de la comparaison d'un string à un booléen, php castera le string en booléen
Dans ma fonction donnée en exemple, j'aurais par exemple dû convertir manuellement ma variable de type mixed en string pour la comparaison, pour éviter que la présence d'un int force le cast du 'NOW()' en int, soit 0.