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

伊谢尔伦
伊谢尔伦original
2017-06-21 15:31:223608parcourir

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!

Déclaration:
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