Page 1 sur 1
[Resolu] settype
Posté : 07 mai 2010, 16:37
par devlop78
Bonjour,
Je souhaiterai savoir si settype sur une variable la contraint par la suite (comme en ActionScript).
exemple :
$mavar = "5machins";
settype ($mavar, 'integer');
echo $mavar; //logiquement affiche 5
$mavar = "bonjour"; // QUE SE PASSE-t-il ? $mavar deviendra un string de valeur "bonjour" ou restera un integer de valeur 0 ou erreur ?
Re: settype
Posté : 07 mai 2010, 16:39
par Genova
Il n'y a pas de typage en PHP, settype aura juste pour effet de "caster" ta variable dans le type donner, mais tu peux le changer par la suite le plus naturellement du monde.
Re: settype
Posté : 07 mai 2010, 17:09
par AB
C'est marrant que tu n'aies pas eu la curiosité de tester puisque tu as déjà écrit le code du test...

Re: settype
Posté : 07 mai 2010, 19:35
par devlop78
j'étais en formation (Flash). Donc en fait le settype n'est pas autre chose qu'un $mavar = (string)$mavar; par exemple. J'ai un mec genre super sûr de lui qui m'a sorti que fallait plus mettre ses variables comme ça $mavar = "chose" mais qu'il fallait utiliser settype, pour pas se faire hacker dans le code. Je lui dis que je vois mal comme ça pourrait être possible, que personne n'a accès au code (où alors settype ou pas ça change rien), enfin bref. Je crois que dans sa p'tite tête il fait référence aux conneries du genre if ($motdepasse == 25), des comparaisons entre string et integer quoi ... enfin bref, je n'applique pas bêtement des règles de sécurité parce qu'on me dit de le faire, mais je cherche à les comprendre avant ...
Enfin bref, c'est donc bien juste une fonction de conversion de typage ... (comme le manuel l'indique) ... ?
Re: settype
Posté : 07 mai 2010, 20:57
par AB
Ben oui c'est comme le manuel l'indique...
Ensuite typer ses variables c'est une mesure de sécurité mais cela n'est utile que quand la sécurité est en jeu, par exemple quand tu reçois une variable issue d'un formulaire, ou une variable $_GET donc quand elle dépend du visiteur, ou alors dans certains contextes particuliers.
Tu pourrais aussi bien utiliser la fonction intval() également.
Evidemment ceux qui viennent d'un langage très typé ont tendance à croire que c'est une obligation absolue pour la sécurité du code. Mais cela permet au plus au développeur de ne pas oublier de le faire quand c'est nécessaire. Néanmoins le non typage des variables peut-être très pratique dans certains cas...
On peut résumer en disant qu'un développeur PHP a plus de possibilités et de facilités (en typant ou non ses variables), mais qu'en contre partie il doit être plus responsable

[Résolu] Re: settype
Posté : 07 mai 2010, 21:12
par devlop78
Tout à fait d'accord, j'apprécie beaucoup avoir true pour if (25 == "25"). Le seul truc qui est énervant et surtout dangereux c'est le transtypage automatique des string en integer, du moins la façon de le faire. if (25 == "25 personnes") ne devrait jamais marcher, on devrait donner la possibilité de faire une fonction comme intval ou je sais pas quoi pour effectuer ce type de choses. La grande sécurité étant pour moi if ((string)25 === "25 personnes") où les deux objets de comparaison sont des variables (évidemment). Là, ça retourne faut même si je n'avais mis que ==.
Enfin bon, le mec en question, et je remarque que c'est souvent le cas des développeurs, croit certainement tout savoir. Les graphistes avec qui je bosse disent que les développeurs sont plus cools que les graphistes, mais moi je trouve les graphistes plus ouverts et plus modestes ...
Voilà, sujet réglé

Re: [Resolu] settype
Posté : 07 mai 2010, 21:22
par AB
Au passage quand tu utilise la triple égalité === alors php compare également le type des variables, une autre possibilité...
Re: [Resolu] settype
Posté : 07 mai 2010, 23:22
par devlop78
oui tout à fait, mais pour le coup if (25 === "25") retournerait false, ça pourrait être con alors que pour se protéger ou pour éviter de mauvaises surprises un petit ((string)25 == (string)"25") arrange tout

et là l'opérateur === est justement inutile (enfin je crois mais si on veut être sûr autant le mettre), puisque l'on est sûr que les deux sont du même type et donc pas de transtypage avec tous les mauvaises choses qui vont avec
