我正在试验一些Boolean
值,出于好奇,我尝试了这个:
$_r = TRUE + FALSE;
if ($_r) ? print 'TRUE' : print 'FALSE'; // Prints TRUE
我发现它返回TRUE
,甚至减法(无论顺序)TRUE - FALSE
也返回TRUE
。可以对Boolean
值进行加法、乘法、除法或减法运算吗?
PHP文档中关于类型杂耍的快速引用:
PHP自动类型转换的一个例子是加法运算符"+"。如果其中一个操作数是浮点运算,则两个操作数都被计算为浮点运算,结果将是浮点运算。否则,操作数将被解释为整数,结果也将是整数。请注意,这不会更改操作数本身的类型;唯一的变化是如何计算操作数以及表达式本身的类型
让我们将其应用于代码$_r = TRUE + FALSE;
:由于操作数(TRUE
和FALSE
)都不是浮点的,因此它们被转换为整数(TRUE
==1
,FALSE
==0
),加法变为1+0
。结果(整数1
)存储在变量$_r
中。
在下一个语句(if ($_r) print 'TRUE'; else print 'FALSE';
)中,if
语句采用括号内的表达式并计算其布尔值。任何不同于零的整数都是TRUE
,零是FALSE
。$_r
的值为1
,转换为布尔值后,它变为TRUE
。因此,代码打印TRUE
。
这似乎是PHP可以接受的,因为它将TRUE
和FALSE
的值分别视为1
和0
,并且Boolean
的值完全允许进行加法、减法、除法和乘法的常见数学运算,以下是证明:
$_r = FALSE * TRUE; // (0 * 1)
if ($_r) ? print 'TRUE' : print 'FALSE'; // prints FALSE
$_r = FALSE / TRUE; // (0 / 1)
if ($_r) ? print 'TRUE' : print 'FALSE'; // prints FALSE
$_r = TRUE / FALSE; // (1 / 0)
if ($_r) ? print 'TRUE' : print 'FALSE'; // prints Warning: **Division by zero**