vor Inkrementieren++++$a$a wird um 1 erhöht, dann $a zurückgeben
nach Inkrementieren++$a++ zuerst $a zurückgeben, dann $ a erhöht sich um 1
vor dem Dekrementieren----$a$a verringert sich um 1, gibt dann $a zurück
und verringert sich dann--$a--gibt zuerst $a und dann $ zurück a dekrementiert um 1
Der erste Hinweis: Inkrementierungs-/Dekrementierungsoperatoren haben keinen Einfluss auf boolesche Werte. Das Verringern eines NULL-Werts hat keine Auswirkung, aber das Erhöhen von NULL führt zu 1.
Mit anderen Worten: Bei Inkrementierungs-/Dekrementierungsoperationen werden die Operanden vor der Operation nicht in Ganzzahlen umgewandelt. Wenn der Operand ein boolescher Wert ist, wird das Ergebnis direkt zurückgegeben.
Inkrementieren/Dekrementieren Boolescher Wert:
$a = TRUE; var_dump(++$a); // bool(true) $a = TRUE; var_dump(--$a); // bool(true) $b = FALSE; var_dump(++$b); // bool(false) $b = FALSE; var_dump(--$b); // bool(false)
Inkrementieren/Dekrementieren NULL:
$a = NULL; var_dump(++$a); // int(1) $a = NULL; var_dump(--$a); // NULL
Beim Umgang mit arithmetischen Operationen an Zeichenvariablen folgt PHP den Gewohnheiten von Perl, nicht denen von C .
Zum Beispiel verwandelt
$a = 'Z'; $a++;
in Perl $a in „AA“, während in C
a = 'Z'; a++;
a in „[“ ( der ASCII-Wert von „Z“ ist 90 und der ASCII-Wert von „[“ ist 91).
Beachten Sie, dass Zeichenvariablen nur inkrementiert, nicht dekrementiert werden können und nur reine Buchstaben (a-z und A-Z) unterstützen.
Zum Beispiel:
$a="9D9"; var_dump(++$a); // string(3) "9E0"
Hier gibt es jedoch noch eine weitere Falle:
$a="9E0"; echo ++$a; // 10
Nach der Installation der oben genannten Regeln sollte 9E1 ausgegeben werden, aber 10 wird ausgegeben Hier. . Warum?
Wenn wir es so schreiben, werden die meisten Menschen wissen, warum.
$a = "9E0"; var_dump(++$a); // float(10)
Der Typ von $a ist Gleitkommazahl, d. h. 9E0 ist die wissenschaftliche Notation von Gleitkommazahlen, d. h. 9 * 10^0 = 9, für 9 Erhöhung ist das Ergebnis natürlich 10.
Referenz: String in numerischen Wert umwandeln
Jetzt kommt wieder die Frage:
$l = "Z99"; $l++;
Was ist das Ergebnis? Das Ergebnis ist „AA00“ gemäß den Regeln der Perl-Sprache.
Es gibt noch einen weiteren Hinweis:
Das Erhöhen/Verringern anderer Zeichenvariablen ist ungültig und die ursprüngliche Zeichenfolge ändert sich nicht.
Ich werde das nicht erklären.
Eine letzte Anmerkung:
$a = '012'; $a++; var_dump($a);
Ist dieses Ergebnis „013“? 13? 11?
Das Ergebnis dieses Absatzes ist int(13) und die Zeichenfolge „012“ wird nicht als Oktalzeichenfolge behandelt.
$a = 012; // 八进制,十进制为 10 $b = "012"; // 转换为整数为十进制 12
Was ist, wenn es mit 0x beginnt?
$a = '0x1A'; $a++; var_dump($a); // int(27)
Dinge, die mit 0 beginnen, gelten nicht als oktal, aber Dinge, die mit 0x beginnen, gelten als hexadezimal.
在 PHP 官方文档中 Integer 整型 还有另一个八进制陷阱:
var_dump(01090); // Oktal 010 = Dezimal 8
Das Handbuch erklärt dies als:
Warning 如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。
Das obige ist der detaillierte Inhalt vonVerständnis und Vorsichtsmaßnahmen für PHP-Inkrementierungs- und Dekrementierungsoperatoren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!