确保给定列表中只有一个布尔值是真的吗?

Mat*_*hew 8 php boolean-logic xor boolean-operations

如果我有以下布尔值

const YESTERDAY = false;
const TODAY = true;
const TOMORROW = false;
Run Code Online (Sandbox Code Playgroud)

我可以写什么代码来确保一个是真的?

我试过这个:

$x = self::YESTERDAY ^ self::TODAY ^ self::TOMORROW;
Run Code Online (Sandbox Code Playgroud)

问题是,与所有三个常量设置true,然后$xtrue.

dev*_*Rew 9

$x = ((int) self::YESTERDAY) + ((int) self::TODAY) + ((int) self::TOMORROW);然后,如果$x === 1;你有你需要的东西.

编辑:

即使没有类型转换(int),它也能很好地运行,感谢@DaveRandom,所以:

if (self::YESTERDAY + self::TODAY + self::TOMORROW == 1) {}至于我.