Heim  >  Artikel  >  Backend-Entwicklung  >  Was ist der Unterschied zwischen der Idee, PHP-Vergleichsoperatoren einzuführen, und herkömmlichen Vergleichsmethoden?

Was ist der Unterschied zwischen der Idee, PHP-Vergleichsoperatoren einzuführen, und herkömmlichen Vergleichsmethoden?

伊谢尔伦
伊谢尔伦Original
2017-06-21 11:13:461183Durchsuche

Der -Vergleichsoperator in PHP ist etwas seltsam und es kann leicht zu Fehlern kommen:

1. Wenn zwei Zeichen in ihrer Größe verglichen werden, sind die beiden Zeichen gleich verglichen mit der Größe des ASCII-Codes – das ist leicht zu verstehen.

2. Wenn zwei Zeichenfolgen in ihrer Größe verglichen werden, beginnen sie mit dem ersten Zeichen und vergleichen die entsprechenden ASCII-Größen, solange sie mit der aktuellen Position einer der Zeichenfolgen beginnen größer ist als das entsprechende Zeichen in einer anderen Zeichenfolge, kann die Größe der beiden Zeichenfolgen direkt bestimmt werden, z. B. 'ba'>'az' - das weiß jeder.

Vergleichen Sie dann '10' und 'a', natürlich ist es immer noch dasselbe. Vergleichen Sie zuerst den ASCII-Code '1' und 'a', 'a' ist größer.

3. Wenn eine Zahl mit einer Zeichenfolge/einem Zeichen verglichen wird, versucht das System zunächst, die Zeichenfolge/das Zeichen in einen Ganzzahl-/Gleitkomma-Typ umzuwandeln, und vergleicht es dann beispielsweise mit „12bsd“. zu 12. 'a' wird in 0 umgewandelt. Es ist zu beachten, dass zu diesem Zeitpunkt der entsprechende ASCII-Codewert nicht mit der Zahl verglichen wird.

Tatsächlich ist das Ergebnis von „a“+10 aus dem gleichen Grund auch 10.

und leicht zu ignorieren: 0 wird mit einer beliebigen Zeichenfolge verglichen, die nicht in eine Zahl umgewandelt werden kann (Operator ist ==), beide geben true zurück.

Am Ende wird folgendes Ergebnis erscheinen:

var_dump(&#39;1000000&#39;<&#39;a&#39;);    //result: boolean true
var_dump(&#39;a&#39;<1);            //result: boolean true
var_dump(1<&#39;1000000&#39;);      //result: boolean true

Es unterscheidet sich immer noch ein wenig von der herkömmlichen Denkweise. .

Die gebräuchlichste Methode, um zu vergleichen, ob zwei Zeichenfolgen gleich sind, besteht darin, den Unterschied zwischen „==“ und „==“ zu beurteilen. Typ und erfordert auch das Gleiche; letzteres erfordert „gleich“, und der gleiche Wert ist ausreichend. Oder verwenden Sie strcmp zur Beurteilung. Dies kann Ihnen jedoch sagen, ob die beiden Zeichenfolgen gleich sind, kann Ihnen jedoch nicht sagen, wo sie unterschiedlich sind.

Im Allgemeinen können Sie !=, == verwenden, um zu vergleichen, ob zwei Objekte gleich sind. Der Grund, warum es sich um zwei Objekte handelt, liegt darin, dass es sich nicht unbedingt nur um Zeichenfolgen handelt, sondern auch um Ganzzahlen usw.
Wenn Sie zum Vergleich !==,=== verwenden (Sie können ein zusätzliches Gleichheitszeichen sehen), müssen die Typen der beiden Objekte genau gleich sein, um „true“ zurückzugeben. Andernfalls verwenden Sie ==,!=, die Zeichenfolge wird zum Vergleich automatisch in den entsprechenden Typ konvertiert.

22 == "22"; weil Auf diese Weise passieren in unserem Programm oft einige unerwartete „Unfälle“:

0 == „Ich liebe dich“ // Rückgabe wahr

1 == „1 Ich liebe dich“;// Return true

Im PHP-Tutorial gibt es eine Reihe von Funktionen für den String-Vergleich: strcmp, strcasecmp,
strncasecmp

(), strncmp(), sie alle sind vorhanden, wenn ersteres besser ist als das Letzteres: Wenn ersteres größer als 0 ist, wird eine ganze Zahl kleiner als 0 zurückgegeben; wenn beide gleich sind, wird 0 zurückgegeben. Die Prinzipien ihres Vergleichs sind dieselben wie die Regeln anderer Sprachen.

strcmp wird für den Vergleich von Zeichenfolgen unter Berücksichtigung der Groß- und Kleinschreibung verwendet: echo strcmp("abcdd", "abcde"); // Gibt 1 (>0) zurück, vergleichen ist „ b“ und „b“

strcasecmp wird für den Zeichenfolgenvergleich ohne Berücksichtigung der Groß- und Kleinschreibung verwendet:
echo strcasecmp("abcdd", "abcde"); // gibt -1 (887ab2d554603060882a81a0d8a0b33f0) zurück und vergleicht abc und abc

strncasecmp wird für den Vergleich eines Teils der Zeichenfolge ohne Berücksichtigung der Groß- und Kleinschreibung verwendet. Der Vergleich beginnt von vorne Der dritte Parameter ist die zu vergleichende Länge:
echo strncasecmp("abcdd", "abcde", 3); // Gibt 0 zurück, vergleicht abc und abc, da die Größe nicht unterschieden wird, also beide sind gleich.

Eine andere Situation besteht darin, dass ein einfacher Vergleich der Zeichenfolgengrößen unsere vorgegebenen Anforderungen nicht erfüllen kann. Normalerweise ist beispielsweise 10.gif größer als 5.gif, aber wenn Sie die oben genannten Funktionen anwenden, wird - 1 zurückgegeben. was bedeutet, dass 10.gif besser ist als 5.gif. Für diese Situation bietet PHP zwei natürliche Kontrastfunktionen strnatcmp,
strnatcasecmp

:

echo strnatcmp("10.gif" , "5. gif"); // Rückgabe 1 (>0)echo strnatcasecmp("10.gif", "5.gif"); // Rückgabe 1 (>0)

In PHP, Die Verwendung von == ist unzuverlässig. Selbst wenn die Variablentypen gleich sind, bedeutet == wahr nicht, dass sie wirklich gleich sind. Versuchen Sie daher, === zum Vergleich in PHP zu verwenden. Denken Sie unbedingt zweimal darüber nach, bevor Sie == verwenden. Die Operation von === in PHP ist ZEND_IS_IDENTICAL. PHP versucht nicht, den Typ des Werts zu ändern. Es ist sehr streng und die Vergleichsgeschwindigkeit ist höher. Zum Beispiel:

$aa = &#39;88.&#39;;//多个点
$b = &#39;88&#39;;
if($aa == $b) 
echo "相等";

得到的结果是相等。因为88是一个数字,php会自动转换成整型或者浮点型进行==比较,当然会相等; strcmp是强制转换成string类型比较,===是要求数值一样并且类型一样 88是int类型,88.是浮点类型,当然不一样。用恒等 === 则 不会得到相等的结论.用strcmp()也不会得到相等的结论.所以最好不要使用 == 作为字符串相等比较.改用strcmp();

       对于俩个字符串, 会首先判断他们是否是numeric_string, 如果是,那么就会转换成整形来比较.. 那么什么是numeric string呢? 因为PHP不区分类型, 所以它采用一个策略, 当你的变量看起来是一个数字的时候, 那么她就认为这个变量是一个数字,然后转换为整形来比较。

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen der Idee, PHP-Vergleichsoperatoren einzuführen, und herkömmlichen Vergleichsmethoden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn