Question

Pourquoi === plus vite que == en PHP?

Était-ce utile?

La solution

Parce que l'opérateur d'égalité == contraint, ou convertit le type de données temporairement pour voir si elle est égale à l'autre opérande alors que === (opérateur d'identité) n'a pas besoin de faire une conversion que ce soit et donc moins de travail est fait, ce qui rend plus rapide .

Autres conseils

=== ne fonctionne pas transtypage, donc 0 == '0' évalue à true, mais 0 === '0' - à false

.

D'abord, === vérifie si les deux arguments sont les mêmes type - de sorte que le numéro 1 et la chaîne « 1 » échoue sur le contrôle de type avant que les comparaisons sont effectivement réalisées. D'autre part, == ne vérifie pas le premier type et va de l'avant et convertit les arguments du même type et fait alors la comparaison.

Par conséquent, === est plus rapide à vérifier une condition échec

Il y a deux choses à considérer:

  1. Si les types d'opérandes sont différents, == et produisent === différents résultats . Dans ce cas, la vitesse des opérateurs n'a pas d'importance; ce qui importe est que l'on produit le résultat souhaité.

  2. Si les types d'opérandes sont identiques, vous pouvez utiliser == ou === à la fois comme produira mêmes résultats . Dans ce cas, la vitesse des deux opérateurs est presque identique. En effet, est effectuée par des opérateurs sans conversion de type.

Je comparais la vitesse:

  • $a == $b vs $a === $b
  • $a et $b sont des nombres entiers aléatoires [1, 100]
  • les deux variables ont été générées et comparées d'un million de fois
  • les tests ont été effectués 10 fois

Et voici les résultats:

 $a == $b $a === $b
--------- ---------
 0.765770  0.762020
 0.753041  0.825965
 0.770631  0.783696
 0.787824  0.781129
 0.757506  0.796142
 0.773537  0.796734
 0.768171  0.767894
 0.747850  0.777244
 0.836462  0.826406
 0.759361  0.773971
--------- ---------
 0.772015  0.789120

Vous pouvez voir que la vitesse est presque identique.

Je ne sais pas vraiment si elle est beaucoup plus rapide, mais === dans la plupart des langues est une comparaison de type direct, alors que == va essayer de faire la contrainte de type si nécessaire / possible de gagner un match.

Le == encourt une surcharge de plus grande conversion de type avant la comparaison. === vérifie d'abord le type, puis procède sans avoir à faire une conversion de type.

Parce que href="https://stackoverflow.com/questions/80646/how-do-the-equality-and-identity-comparison-operators-differ"> === avant de les comparer.

Je doute que la différence de vitesse est très bien. Dans des circonstances normales, vous devez utiliser quel que soit l'opérateur a plus de sens.

En conclusion === est plus rapide car ne convertit le type de données pour voir si deux variables ont la même valeur, mais quand vous avez besoin de voir si deux variables ont même valeur que vous utiliserez == si doesen't Mather ce type sont des variables, ou si === est important aussi le type de variables.

Plus rapide ne doit pas être mesurée juste à temps d'exécution directe (tests de performance directs sont presque négligeables dans ce cas). Cela dit, je besoin de voir un test impliquant itération, ou récursivité, pour vraiment voir s'il y a une importante différence cumulée (lorsqu'elle est utilisée dans un contexte réaliste). Les tests et le temps de débogage vous permettra d'économiser le traitement des cas de pointe devrait être significatif pour vous, aussi

Si les résultats des tests sont corrects, alors il doit être un problème de compilateur,

Le processeur fera tout ce qu'il est dit de faire sur un cycle d'horloge

Si elle a moins à faire, alors il sera plus rapide à faire

Addition:

Eh bien en fait, si le compilateur a déjà créé des charges de code machine à traiter, puis si elle a déjà ajouté zillions de choses à faire face à ce type de données a besoin de comparer, puis la suppression d'un « mineur » IF ne sera pas changer les vitesses bien du tout.

Si quelqu'un lit encore ce sont alors je suis plus intéressant dans la discussion.

Phil

scroll top