我发现自己经常会做这种事情:
$foo = true;
$foo = $foo && false; // bool(false)
使用位运算符,您可以使用&=
和|=
简写方式:$foo = 1;
$foo &= 0; // int(0)
鉴于对 1
和 0
的位运算在功能上等同于对 true
和 false
的布尔运算,我们可以依靠类型转换并执行类似以下代码:
$foo = true;
$foo &= false; // int(0)
$foo = (bool)$foo; // bool(false)
...但这很丑陋,也违背了使用简写赋值语法的初衷,因为我们必须使用另一条语句来将类型转回布尔值。
我真正想做的是像这样:
$foo = true;
$foo &&= false; // bool(false)
...但是&&=
和||=
不是有效的运算符,这很明显。所以,我的问题是 - 是否有其他甜美的语法或者可能作为替代的晦涩核心函数?对于变量像$foo
那样简短,只使用$foo = $foo && false
语法并不是什么大问题,但是多维数组元素和/或对象方法调用可以使语法相当冗长。
$some['big']['long']['variable'] = $some['big']['long']['variable'] && $some['other']['boolean'];
)。 - FtDRbwLXw6$foo &= false;
和$foo &&= false;
对于$foo = true
。所以我看不到问题/目标在哪里。 - Jason McCrearyint(0)
,而后者会产生bool(false)
。因此,尽管由于隐式类型转换,0 == false
,但0 !== false
。 - FtDRbwLXw6$mailsSent = (Swift_Mailer)$mailer->send($message)
为false
,我一直在连续使用$mailsSent &= $mailer->send($message2)
。经过一年的使用,这是我第一次在第一封和第二封邮件组中有不同数量的收件人。今天我发现了两件事。首先,如果邮件成功发送,则send()
方法返回发送的邮件数而不是true
。其次,&=
是一个按位赋值运算符,意味着1 + 2 = 0
。应该更仔细地阅读文档。通过(bool)$mailer->send($message)
解决了这个问题。 - s3c