递增递减不能作用于 bool 值

本文探讨了PHP中递增和递减操作符在不同数据类型上的行为,特别是针对false、NULL和字符串。指出在false上递增和递减无效,但在NULL上递增会得到1,而递减保持不变。对于字母,递增会导致字母顺序变化,但不能递减。还提到了9E0这样的数字字符串会被解析为浮点数并导致意外结果。同时,文章揭示了类型转换的复杂性,如将FALSE转换为数组再转回布尔值会得到true。
摘要由CSDN通过智能技术生成

递增、递减不能使用在 false 上面,但是 += 和 -= 可以


<?php

$a = false;

++$a;

var_dump($a);// false

$a++;

var_dump($a);// false

--$a;

var_dump($a);// false

$a--;

var_dump($a);// false

$a-= 1;

var_dump($a);// -1

$a+= 1;// 因为前面改变了,变成了 -1,所以下面是 0 ,请不要在这里疑惑

var_dump($a);// 0

递增可以作用域 NULL,但是递减不可以

$a = null;
++$a;
var_dump($a); //1

$a = null;
--$a;
var_dump($a); // null

递增可以作用于字母,但是递减不可以
a-y 递增时字母都将向后增加一个,但是当 z 的时候,就将会回到 aa ,循环如此,但是只能递增,不能递减

$a = 'a';
++$a;
var_dump($a); // b

$a = 'z';
++$a;
var_dump($a); // aa

$a = 'A';
++$a;
var_dump($a); // B

$a = 'Z';
++$a;
var_dump($a); // AA

混合递增数字和字母


>>> $a = 'A1'
=> "A1"
>>> ++$a
=> "A2"
>>> ++$a
=> "A3"
>>> $a = '001A'
=> "001A"
>>> ++$a
=> "001B"
>>> ++$a
=> "001C"
>>> $a = 'A001'
=> "A001"
>>> ++$a
=> "A002"
>>> ++$a
=> "A003"

但是也有一些意外情况


>>> $a = '9E0'
=> "9E0"
>>> ++$a
=> 10.0

这是因为9E0 被当作成了浮点数的字符串表示,被 PHP 当成了 9*10^0 ,被评估成了 9 ,然后在执行的递增。

如果嵌套强制类型转换,也会发生意外

var_dump(TRUE === (boolean) (array) (int) FALSE);// true

var_dump((array) (int) FALSE);

因为当把 FALSE 转为数字是,他是 0,再转为数组后,就成了,[0],所以再转为 boolean 时,将会返回 true,因为数组不为空,并且 [0] != []

参考:https://www.php.net/manual/zh/language.types.type-juggling.php#115373

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值