8797 sujets

Développement web côté serveur, CMS

Bonjours,
Etant débutant j'ai du mal à imaginer une situation ou il serait utile de forcer le type d'une variable.

Si vous avez un exemple, merci
Par exemple pour une série de fonction de validation de données ou tu veux que toutes les fonctions renvoient un booléen tu pourrais avoir un truc du genre :

preg_match renvoi un entier (1 ou 0)

Sans transtypage :


function validateRegex($value, $regex)
{
  $res = preg_match($regex, $value);
  if ($res === 0)
  {
    return FALSE;
  }

  return TRUE;
}


Avec :


function validateRegex($value, $regex)
{
  return (bool)preg_match($regex, $value);
}

Modifié par jb_gfx (10 May 2012 - 15:03)
Ou dans une comparaison :


$foo = 1; // peut valoir 1 ou 0
$bar = TRUE; // booléen

if ($foo === intval($bar))


Ou pour lire des données depuis un fichier texte ou pour les insérer dans une bdd, etc.
Modifié par jb_gfx (10 May 2012 - 15:12)
Je me rend as compte, j'ai l'habitude de m'en servir depuis toujours mais j'ai pas de meilleur exemple en tête. Peut être que si un vrai dev passe par là il pourra te donner une meilleure explication. Smiley smile
Modérateur
Je ne suis pas un vrai dev, mais je vais tenter. Un typage fort aide notamment au debuggage.

Imaginons l'exemple suivant:

10. $nbMessages = 13;
…
// ici 300 lignes de code
…
310. $nbMessages = 'Vous avez'.$nbMessages.' messages';
…
// ici 300 lignes de code
…
640. if ($nbMessages > 10) {
641.   // affiche une pagination
642. }


Au milieu du code on change le type pour formater avant l'affichage.
Mais on a oublié qu'à la fin du code on utilise cette variable pour gérer la pagination. Dans cet exemple, la pagination ne sera jamais affichée car $nbMessages sera interprétée et convertie à la valeur 0.

Protéger le type empêche de créer ce genre d'erreurs qui sont longues à débugguer car cela ne provoque pas d'erreur. Si $nbMessages devait rester un entier, la ligne 310 provoquerait une erreur et le bug immédiatement décelé.

De plus il peut y avoir des avantages de performances, en ayant des plages de mémoire fixes réservées à des variables. Avec du typage dynamique, c'est la fête au slip dans la mémoire…