En PHP, faut-il utiliser des opérateurs de comparaison triple-égal (===) au lieu de double-égal (==) à moins quil ny ait une raison particulière dutiliser ce dernier?


Meilleure réponse

Absolument!

En PHP, Javascript ou tout autre langage proposant des contrôles déquivalence à la fois lâches et stricts, il est préférable dutiliser la version stricte sauf si vous avez une raison impérieuse de faire autrement . (En fait, certains développeurs de logiciels insistent pour que vous nutilisiez pas du tout de vérification dégalité lâche!) Il y a un certain nombre de raisons à cela.

Tout dabord, lutilisation dune équivalence lâche peut conduire à toute une classe de défauts cela peut être évité avec une équivalence stricte. Bien que PHP soit particulièrement connu pour être «utile», la plupart des langages avec un typage dynamique sont indulgents lorsquil sagit de convertir entre les types. Les données qui passent léquivalence lâche peuvent se comporter très bien dans de nombreux cas et aller beaucoup plus loin dans le code avant de déclencher une erreur ou de provoquer un effet secondaire inattendu. Les contrôles déquivalence stricts, quant à eux, sapparentent davantage aux types de contrôles qui se produisent dans les langages à typage statique; il est beaucoup moins probable que des données dans un format incorrect soient fous.

Un problème connexe est de savoir comment léquivalence lâche rend le code plus difficile à raisonner. Si vous utilisez une équivalence stricte, vous pouvez émettre de nombreuses hypothèses sur les données qui passent le contrôle. Ce n’est pas le cas si vous utilisez une équivalence lâche. Prenons les deux exemples suivants.

// Example #1: strict

if ( $i === 1 ) {

doThing( $i );

}

// Example #2: loose

if ( $i == 1 ) {

doThing( $i );

}

Dans le premier exemple, nous pouvons supposer que la fonction « doThing » est appelée avec une valeur numérique et il suffit de considérer comment cette fonction traiterait les nombres.

Dans le deuxième exemple, cependant, «doThing» peut être appelé avec une variété de types, y compris des chaînes ou des valeurs booléennes. Lors de la lecture de la fonction «faire», vous devez réfléchir à la manière dont chaque type peut être géré, y compris toutes les règles (et parfois absurdes) concernant les conversions de types implicites. Cest beaucoup de choses à garder en tête!

De plus, en utilisant une équivalence lâche, vous nêtes pas explicite. Cela contribue non seulement à la difficulté de raisonner à travers la logique, mais échoue également à saisir les exigences réelles que la logique est censée représenter. Avec lexemple n ° 2 ci-dessus, il ny a aucun moyen de savoir si le programmeur dorigine attendait des valeurs numériques, des valeurs de chaîne, des valeurs booléennes ou une combinaison de celles-ci. Cela rend le code un casse-tête à maintenir.

Enfin, si le cast de type implicite peut être pratique, il n’en a guère besoin dans un environnement professionnel. Vous pouvez toujours définir des valeurs par défaut sensibles ou forcer manuellement les données dans le type approprié. Cela peut demander plus de code et plus defforts, mais cela augmente également considérablement la fiabilité de votre code.

Réponse

Si vous savez que deux valeurs doivent avoir le même type, alors oui, utilisez Strict ( ===) sur lâche (==). Strict a de meilleures performances car il na pas à faire de conversion de type comme le fait loose.

Par exemple 1 == « 1 » renvoie true car cette chaîne est convertie en un nombre pour vérifier légalité

Alors que 1 === « 1 » renvoie faux

Légalité stricte ne va pas du tout au même type? FALSE « 

Jespère que cela vous aidera

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *