递增、递减不能使用在 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