Heim  >  Artikel  >  Backend-Entwicklung  >  Verständnis und Vorsichtsmaßnahmen für PHP-Inkrementierungs- und Dekrementierungsoperatoren

Verständnis und Vorsichtsmaßnahmen für PHP-Inkrementierungs- und Dekrementierungsoperatoren

伊谢尔伦
伊谢尔伦Original
2017-06-21 15:31:223555Durchsuche

Inkrement-Dekrement-Operator

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!

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