Maison >développement back-end >tutoriel php >Compréhension et précautions pour les opérateurs d'incrémentation et de décrémentation PHP
opérateur d'incrémentation de décrémentation
avant que l'incrément++++$a$a soit incrémenté de 1, puis renvoie $a
après l'incrément++$a++ d'abord Renvoie $a, puis $ a augmente de 1
avant de décrémenter----$a$a diminue de 1, puis renvoie $a
puis diminue--$a--retourne d'abord $a, puis $ a décrémente de 1
La première note : les opérateurs d'incrémentation/décrémentation n'affectent pas les valeurs booléennes. La décrémentation d'une valeur NULL n'a aucun effet, mais l'augmentation de NULL donne 1.
En d'autres termes : Lors des opérations d'incrémentation/décrémentation, les opérandes ne seront pas convertis en entiers avant l'opération. Si l'opérande est une valeur booléenne, le résultat est renvoyé directement.
Incrémenter/décrémenter Booléen :
$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)
Incrémenter/décrémenter NULL :
$a = NULL; var_dump(++$a); // int(1) $a = NULL; var_dump(--$a); // NULL
Lorsqu'il s'agit d'opérations arithmétiques sur des variables de caractères, PHP suit les habitudes de Perl, pas celles du C .
Par exemple, en Perl
$a = 'Z'; $a++;
transformera $a en 'AA', tandis qu'en C,
a = 'Z'; a++;
transformera a en '[' ( la valeur ASCII de « Z » est 90 et la valeur ASCII de « [ » est 91).
Notez que les variables de caractères ne peuvent être qu'incrémentées, pas décrémentées, et ne prennent en charge que les lettres pures (a-z et A-Z).
Par exemple :
$a="9D9"; var_dump(++$a); // string(3) "9E0"
Cependant, il y a un autre piège ici :
$a="9E0"; echo ++$a; // 10
Après avoir installé les règles ci-dessus, 9E1 devrait être affiché, mais 10 est affiché ici. . Pourquoi?
Si nous l’écrivons ainsi, la plupart des gens sauront pourquoi.
$a = "9E0"; var_dump(++$a); // float(10)
Le type de $a est Point flottant, c'est-à-dire que 9E0 est la notation scientifique des nombres à virgule flottante, c'est-à-dire 9 * 10^0 = 9, pour 9 Augmentation, le résultat est bien sûr 10.
Référence : Convertir la chaîne en valeur numérique
Maintenant, la question revient :
$l = "Z99"; $l++;
Quel est le résultat ? Le résultat est "AA00" selon les règles du langage Perl.
Il y a une autre remarque :
L'augmentation/la diminution d'autres variables de caractères ne sera pas valide et la chaîne d'origine ne changera pas.
Je ne vais pas expliquer cela.
Une dernière remarque :
$a = '012'; $a++; var_dump($a);
Ce résultat est-il '013' ? 13 ? 11 ?
Le résultat de ce paragraphe est int(13), et la chaîne '012' n'est pas traitée comme octale.
$a = 012; // 八进制,十进制为 10 $b = "012"; // 转换为整数为十进制 12
Et si ça commence par 0x ?
$a = '0x1A'; $a++; var_dump($a); // int(27)
Les choses commençant par 0 ne sont pas considérées comme octales, mais celles commençant par 0x sont considérées comme hexadécimales.
在 PHP 官方文档中 Integer 整型 还有另一个八进制陷阱:
var_dump(01090); // Octal 010 = Decimal 8
Le manuel explique cela comme :
Warning 如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。
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!