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

Compréhension et précautions pour les opérateurs d'incrémentation et de décrémentation PHP

伊谢尔伦
Libérer: 2023-03-10 22:50:01
original
3696 Les gens l'ont consulté

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)
Copier après la connexion

Incrémenter/décrémenter NULL :

$a = NULL;
var_dump(++$a); // int(1) 
$a = NULL;
var_dump(--$a); // NULL
Copier après la connexion

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++;
Copier après la connexion

transformera $a en 'AA', tandis qu'en C,

a = 'Z';
a++;
Copier après la connexion

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"
Copier après la connexion

Cependant, il y a un autre piège ici :

$a="9E0"; 
echo ++$a;  // 10
Copier après la connexion

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)
Copier après la connexion

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++;
Copier après la connexion

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);
Copier après la connexion

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
Copier après la connexion

Et si ça commence par 0x ?

$a = '0x1A';
$a++;
var_dump($a);   // int(27)
Copier après la connexion

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 整型 还有另一个八进制陷阱:
Copier après la connexion

var_dump(01090); // Octal 010 = Decimal 8

Le manuel explique cela comme :

Warning
如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal