php中具有布尔值的数学运算


Mathematical operations with Boolean values in php

我正在试验一些Boolean值,出于好奇,我尝试了这个:

$_r = TRUE + FALSE;
if ($_r) ? print 'TRUE' : print 'FALSE'; // Prints TRUE

我发现它返回TRUE,甚至减法(无论顺序)TRUE - FALSE也返回TRUE。可以对Boolean值进行加法、乘法、除法或减法运算吗?

PHP文档中关于类型杂耍的快速引用:

PHP自动类型转换的一个例子是加法运算符"+"。如果其中一个操作数是浮点运算,则两个操作数都被计算为浮点运算,结果将是浮点运算。否则,操作数将被解释为整数,结果也将是整数。请注意,这不会更改操作数本身的类型;唯一的变化是如何计算操作数以及表达式本身的类型

让我们将其应用于代码$_r = TRUE + FALSE;:由于操作数(TRUEFALSE)都不是浮点的,因此它们被转换为整数(TRUE==1FALSE==0),加法变为1+0。结果(整数1)存储在变量$_r中。

在下一个语句(if ($_r) print 'TRUE'; else print 'FALSE';)中,if语句采用括号内的表达式并计算其布尔值。任何不同于零的整数都是TRUE,零是FALSE$_r的值为1,转换为布尔值后,它变为TRUE。因此,代码打印TRUE

这似乎是PHP可以接受的,因为它将TRUEFALSE的值分别视为10,并且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**