Rumah > pembangunan bahagian belakang > tutorial php > php递增递减运算符理解及注意事项

php递增递减运算符理解及注意事项

伊谢尔伦
Lepaskan: 2023-03-10 22:50:01
asal
3696 orang telah melayarinya

递增递减运算符

前递增++++$a$a自增1,然后返回$a

后递增++$a++先返回$a,然后$a自增1

前递减----$a$a自减1,然后返回$a

后递减--$a--先返回$a,然后$a自减1

第一个注意事:递增/递减运算符不影响布尔值。递减NULL值也没有效果,但是递增NULL的结果是1。

换句话说:递增/递减运算中,不会把操作数转换成整数后再运算。如果运算数是布尔值,则直接返回结果。

递增/递减布尔值:

$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)
Salin selepas log masuk

递增/递减NULL:

$a = NULL;
var_dump(++$a); // int(1) 
$a = NULL;
var_dump(--$a); // NULL
Salin selepas log masuk

在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。

例如,在 Perl 中

$a = 'Z';
$a++;
Salin selepas log masuk

将把$a变成'AA',而在 C 中,

a = 'Z';
a++;
Salin selepas log masuk

将把a变成'['('Z'的 ASCII 值是90,'['的 ASCII 值是91)。

注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。

例如:

$a="9D9"; 
var_dump(++$a);  // string(3) "9E0"
Salin selepas log masuk

但是,这里又有一个陷阱了:

$a="9E0"; 
echo ++$a;  // 10
Salin selepas log masuk

安装上面的规则,应该输出9E1,但是这里却输出了10。为什么?

如果我们这么写,大部人就知道是为什么了。

$a = "9E0"; 
var_dump(++$a);  // float(10)
Salin selepas log masuk

$a的类型是浮点型,也就是说,9E0是浮点数的科学记数法,即9 * 10^0 = 9,对9自增,结果当然是10了。

参考:字符串转换为数值

现在问题又来了:

$l = "Z99";
$l++;
Salin selepas log masuk

这个结果是多少呢?结果按照 perl 语言的规则,是"AA00"。

还有一个注意事项

递增/递减其他字符变量则无效,原字符串没有变化。

这个就不解释了。

最后一个注意事项:

$a = '012';
$a++;
var_dump($a);
Salin selepas log masuk

这个结果是'013'?13?11?

这段的结果是int(13),字符串'012'并没有被当作八进制。

$a = 012;   // 八进制,十进制为 10
$b = "012"; // 转换为整数为十进制 12
Salin selepas log masuk

如果是0x开头的呢?

$a = '0x1A';
$a++;
var_dump($a);   // int(27)
Salin selepas log masuk

0开头的不被认为是八进制,但是0x开头的却被认为是十六进制。

在 PHP 官方文档中 Integer 整型 还有另一个八进制陷阱:
Salin selepas log masuk

var_dump(01090); // 八进制 010 = 十进制 8

手册中对此的解释为:

Warning
如果向八进制数传递了一个非法数字(即 8 或 9),则后面其余数字会被忽略。
Salin selepas log masuk

Atas ialah kandungan terperinci php递增递减运算符理解及注意事项. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan