Table des matières
Quelle est la différence entre == et === ?
Comment le jonglage du type de PHP fonctionne avec ==
1. Crises en commençant par des caractères non nucères convertis en 0
==" > 2. Les chaînes vides, null , false et 0 sont toutes "fausses" et interchangeables avec ==
3 .
Pourquoi === est plus sûr et plus prévisible
Conseils pratiques pour éviter les bogues de jonglerie de type
Exemple du monde réel: Connexion de connexion via une comparaison lâche
Résumé: Tenez-vous à === à moins que vous ne sachiez ce que vous faites
Maison développement back-end tutoriel php Déstaurer le jonglage du type de PHP: un guide de `==` contre `===`

Déstaurer le jonglage du type de PHP: un guide de `==` contre `===`

Jul 28, 2025 am 04:40 AM
PHP Data Types

== effectue une comparaison lâche avec le jonglage de type, === vérifie la valeur et le type strictement; 1. "PHP" == 0 est vrai car les chaînes non numériques se convertissent en 0, 2. Les chaînes vides, nuls, fausses et 0 sont égales, 3. La notation scientifique comme "0e123" == "0e456" peut causer des problèmes de sécurité; Utilisez toujours === pour des comparaisons prévisibles et sécurisées, en particulier avec l'entrée ou l'authentification de l'utilisateur, pour éviter les bogues et les vulnérabilités de coercition.

Déstaurer la jonglage de type PHP \ S: un guide de `==` contre `===`

Lorsque vous comparez des valeurs en PHP, la différence entre == et === peut sembler subtile au début - mais c'est l'une des sources les plus courantes de bugs pour les débutants et les développeurs expérimentés. Comprendre le comportement de jonglage de type PHP est la clé de l'écriture de code prévisible et sécurisé.

Déstaurer le jonglage du type de PHP: un guide de `==` contre `===`

Quelle est la différence entre == et === ?

La réponse courte:

  • == est l' opérateur de comparaison lâche (ou égal) - il vérifie si deux valeurs sont égales après la jonglerie de type .
  • === est l' opérateur de comparaison strict (ou identique) - il vérifie si deux valeurs sont égales et du même type .

Cela signifie:

Déstaurer le jonglage du type de PHP: un guide de `==` contre `===`
 0 == "php" // true? Oui, et voici pourquoi - plus à ce sujet ci-dessous
0 === "PHP" // FAUX - différents types et valeurs

Cette première ligne semble bizarre - comment 0 peut-on égaler "php" ? Bienvenue dans le jonglage de type de PHP.


Comment le jonglage du type de PHP fonctionne avec ==

Lorsque vous utilisez == , PHP essaie d'être utile en convertissant les valeurs en un type commun avant de les comparer. C'est ce qu'on appelle la jonglerie de type . Bien que pratique dans certains cas, cela peut conduire à des résultats surprenants.

Déstaurer le jonglage du type de PHP: un guide de `==` contre `===`

Voici quelques gatchas communs:

1. Crises en commençant par des caractères non nucères convertis en 0

 "php" == 0 // vrai
"123ABC" == 123 // Vrai
"ABC123" == 0 // Vrai

Pourquoi? Lorsque PHP convertit une chaîne en un nombre et qu'il ne commence pas par un nombre valide, il devient 0 .

Ainsi, "php" devient 0 et 0 == 0true .

2. Les chaînes vides, null , false et 0 sont toutes "fausses" et interchangeables avec ==

 "" == 0 // Vrai
"" == faux // vrai
null == false // vrai
[] == false // faux (les tableaux ne sont pas vaguement égaux à false)
0 == false // vrai

Ceci est particulièrement dangereux lors de la vérification des valeurs de retour des fonctions ou des entrées de formulaire.

3 .

 "0e12345" == "0e67890" // Vrai - tous deux traités comme 0 en notation scientifique
"1E3" == 1000 // Vrai - "1E3" Convertit en 1000

Cela a été exploité dans les vulnérabilités de sécurité (par exemple, les attaques de comparaison de hachage si vous n'utilisez pas === ).


Pourquoi === est plus sûr et plus prévisible

La comparaison stricte === n'effectue aucune conversion de type. Il vérifie à la fois la valeur et le type .

 0 == "0" // true - php convertit la chaîne "0" à int 0
0 === "0" // FAUX - L'un est entier, l'un est une chaîne

false == 0 // vrai
false === 0 // faux

"" == null // Vrai
"" === null // faux

L'utilisation === élimine l'ambiguïté. Vous savez toujours ce que vous comparez.


Conseils pratiques pour éviter les bogues de jonglerie de type

Voici comment protéger votre code:

  • Use === et !== Par défaut , sauf si vous voulez spécifiquement la coercition de type.
  • Valider et désinfecter les types d'entrée tôt - ne comptez pas sur des comparaisons lâches pour gérer les types mixtes.
  • Soyez prudent lorsque vous comparez les données d'entrée ou d'API , vérifiez toujours le type si le contexte est important.
  • Utiliser is_int() , is_string() , is_bool() lorsque vous devez confirmer les types.
  • Utilisez strcmp() ou hash_equals() pour les comparaisons de chaînes sécurisées (en particulier avec les hachages / jetons).

Exemple: comparaison de hachage de mot de passe sûr

 // ne fais pas ça
if (mot de passe_hash ("pass", mot de passe_default) == $ userInputhash)

// fais ça
if (hash_equals ($ stockagehash, $ inputhash)))

hash_equals() empêche les attaques de synchronisation et utilise une comparaison stricte.


Exemple du monde réel: Connexion de connexion via une comparaison lâche

Imaginez ce code erroné:

 fonction isadmin ($ userrole) {
    retourner $ userrole == "admin";
}

Isadmin (1); // pourrait retourner vrai si "admin" se convertit en quelque sorte en 1?

Attendez - en fait, "admin" se convertit en 0 , donc 1 == "admin" est false . Mais considérez:

 $ userInput = "1";
if ($ userInput == true) {// true - String "1" == bool true
    // accorder l'accès?
}

Ou pire:

 if ($ _get ['id'] == "123") {
    // Afficher les données utilisateur
}

Si id est passé comme 123abc , PHP le convertit en 123 lors de la comparaison numériquement - donc 123abc == 123 pourrait être true . Mais 123abc === 123 est false .


Résumé: Tenez-vous à === à moins que vous ne sachiez ce que vous faites

  • == Effectue un jonglage de type - peut conduire à des résultats inattendus.
  • === Compare la valeur et le type - prévisibles et sûrs.
  • Utilisez toujours === pour les comparaisons impliquant des entrées, de l'authentification ou des vérifications d'état des utilisateurs.
  • Comprenez que le typage lâche de PHP est une fonctionnalité - mais qui nécessite de la prudence.

Fondamentalement, si vous ne comptez pas intentionnellement sur la coercition de type, === devrait être votre choix par défaut. Il ne s'agit pas seulement de l'exactitude - il s'agit d'éviter les bogues subtils et les problèmes de sécurité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

La dualité de PHP: naviguer des déclarations de type vs et stricte La dualité de PHP: naviguer des déclarations de type vs et stricte Jul 26, 2025 am 09:42 AM

PHP prend en charge la coexistence de types lâches et de types stricts, qui est la caractéristique centrale de son évolution des langages de script aux langages de programmation modernes. 1. Les types lâches conviennent au prototypage rapide, à la gestion de l'entrée dynamique des utilisateurs ou à l'amarrage avec des API externes, mais il existe des problèmes tels que le risque de conversion de type implicite, la difficulté de débogage et le faible support d'outils. 2. Le type strict est activé par Declare (strict_types = 1), qui peut détecter les erreurs à l'avance, améliorer la lisibilité du code et le support IDE, et convient aux scénarios avec des exigences élevées pour la logique commerciale de base, la collaboration d'équipe et l'intégrité des données. 3. L'utilisation mixte doit être utilisée dans le développement réel: les types stricts sont activés par défaut, les types lâches ne sont utilisés que lorsque cela est nécessaire aux limites d'entrée, et la conversion de vérification et de type est effectuée dès que possible. 4. Les pratiques recommandées incluent l'utilisation de PHPSTA

Modernisation de votre base de code avec les types d'union de PHP 8 Modernisation de votre base de code avec les types d'union de PHP 8 Jul 27, 2025 am 04:33 AM

Upgradephp7.xcodebasestophp8 byRplacingPhpdoc-SuggestypesLILY @ paramstring | IntwithNativeUnionTypeSuchassstring | IntForparametersAndreturnTypes, qui ImprovestySyPesafetyAnd Clarity

Les périls de la précision: manipulation des nombres à virgule flottante en php Les périls de la précision: manipulation des nombres à virgule flottante en php Jul 26, 2025 am 09:41 AM

0,1 0,2! == 0,3Inphpdutobinaryfloating-pointprécisionlimitations, SodevelopersMustavoidDirectcomparisonsonsandUseepSilon-basés à base, Employbcmathorgmpforexactarithmetics, StorecurrencyInntegers whenpassib

De `mixte» à «vide»: un guide pratique des déclarations de type de retour PHP De `mixte» à «vide»: un guide pratique des déclarations de type de retour PHP Jul 27, 2025 am 12:11 AM

ReturnTypeSinphpimprovecodeReliability andclarity gyspeciying whatafonction alustreturn.2.UsUsBasicTypeSlikestring, Array, ordatetimetoenforcecorrectreturnvaluesandcatcherrorserely.3.ApplyNullepleTyPeswi

Comprendre le pseudo-type «callable» et sa mise en œuvre Comprendre le pseudo-type «callable» et sa mise en œuvre Jul 27, 2025 am 04:29 AM

AcalleableInphpisapseudo-TyperepresentinganyValueThatCanBeinvokedUsing () Opérateur, a utilisé l'imprimé pour les calculs de la codécolaire: 1) nommé de types de fonctionnalités

PHP 8.1 Enum: un nouveau paradigme pour les constantes de type type PHP 8.1 Enum: un nouveau paradigme pour les constantes de type type Jul 28, 2025 am 04:43 AM

Les énumérations introduites dans PHP8.1 fournit une collection constante de type type, résolvant le problème de la valeur magique; 1. Utilisez ENUM pour définir des constantes fixes, telles que le statut :: brouillon, pour vous assurer que seules des valeurs prédéfinies sont disponibles; 2. Bind Enum aux chaînes ou entiers via BackEdedenums, et soutenez la conversion de () et TryFrom () entre les scalaires et les énumérations; 3. Les énumérations peuvent définir des méthodes et des comportements, tels que Color () et Isoditable (), pour améliorer l'encapsulation de la logique commerciale; 4. Applicable aux scénarios statiques tels que l'état et la configuration, pas pour les données dynamiques; 5. Il peut implémenter l'interface Unitenum ou Backedénum pour les contraintes de type, améliorer la robustesse du code et la prise en charge de l'IDE, et est

La durée de vie d'une variable: la structure interne de «zval» de PHP expliquée La durée de vie d'une variable: la structure interne de «zval» de PHP expliquée Jul 27, 2025 am 03:47 AM

PHP utilise la structure ZVAL pour gérer les variables. La réponse est: 1. Zval contient des valeurs, des types et des métadonnées, avec une taille de 16 octets; 2. Lorsque le type change, seules les informations du syndicat et du type doivent être mises à jour; 3. Les types complexes se réfèrent aux structures avec les comptes de référence via des pointeurs; 4. Lors de l'attribution de valeurs, la copie est utilisée pour optimiser la mémoire; 5. Les références font que les variables partagent le même zval; 6. Les références de recyclage sont traitées par un collecteur de déchets spécial. Cela explique le mécanisme sous-jacent du comportement variable de PHP.

Gestion de la mémoire et types de données PHP: une perspective de performance Gestion de la mémoire et types de données PHP: une perspective de performance Jul 28, 2025 am 04:42 AM

La gestion de la mémoire de PHP est basée sur le comptage des références et le recyclage du cycle. Différents types de données ont un impact significatif sur les performances et la consommation de mémoire: 1. Les nombres entiers et les nombres à virgule flottante ont une petite utilisation de la mémoire et l'opération la plus rapide, et doivent d'abord être utilisés pour les opérations numériques; 2. Les chaînes adoptent un mécanisme de copie d'écriture, mais de grandes chaînes ou des épisages fréquents entraîneront des problèmes de performance, il est donc conseillé d'utiliser l'optimisation d'Implose; 3. Les frais généraux de mémoire du tableau sont grands, en particulier les tableaux gros ou imbriqués. Les générateurs doivent être utilisés pour traiter de grands ensembles de données et libérer les variables en temps opportun; 4. Les objets sont passés en mode de référence, et l'instanciation et l'accès aux attributs sont lents, ce qui convient aux scénarios où l'encapsulation comportementale est requise; 5. Les types de ressources doivent être libérés manuellement, sinon cela peut entraîner une fuite au niveau du système. Afin d'améliorer les performances, les types de données doivent être sélectionnés raisonnablement, la mémoire doit être libérée dans le temps et les grandes données doivent être évitées par les variables globales.

See all articles