php什么时候转为布尔值,PHP使用’!!’转换为布尔值

这里的问题很简单。 一直在查看一些代码,我已经看到了一个似乎将给定变量转换为布尔值的函数。 它是这样的:

function to_bool( $var ) {

return !!$var;

}

很简单,但是它如何工作? 以前从未见过,谷歌搜索并没有真正吸引我。 额外的"!" 排序结果如何? '!$ var'可用于检查var是否为假,'!!' 把"假"变成真,反之亦然?

你的意思是(bool)$var;,因为我在两个之前从未见过! 在变量之前

!求反,所以有两个双求和,将其转换为布尔值...

双底片,一直在想。 很奇怪。 您认为它完全可靠吗?

好问题老兄

这种构造在其他语言中更为常见。 显然,这是在C ++中强制转换为bool而不产生编译器警告的一种方法。 -实际上,这种做法可能是由于C直到C99才具有本机布尔类型(?)

那么,$var的适当值是什么? 即时通讯试图了解为什么id需要这样做

我真的建议不要为此使用函数。 (bool)$var在任何需要的地方它都更加干净,并且不需要库函数来避免致命错误。

how does it work?

not运算符将变量置于条件中。因此,结果是布尔值。第二个不会翻转其值。

更清楚的是,在代码中使用显式强制转换,而不是使用这样的函数:

(bool)$var;

要学究,第二个不在时间序列上,或者第一个不在物理序列上,将值翻转。

@Seth:对。 那就是我的意思。

拿!! 2

!2计算为!(true)

结果为!false最终结果true。非布尔值基本上将正确的操作数视为布尔值。

一个!将是一个反向布尔值,因此两个!!将成为一个非反向布尔值。这是变量的双重取反,并以布尔类型返回

嗯...有趣。

嗯,PHP在确定变量是" true"还是" false"时遵循一组特定的规则。

使用某些运算符将迫使您做出此决定。例如,当您使用.运算符添加字符串"a"和整数2时,将得到"a2",因为.运算符的意图是连接。

在这里,第一个!表示您正试图否定变量。取反意味着您必须首先将其视为布尔值,这就是它的作用。然后第二个!将其取反。

这是一种奇怪的方式。坦白说,if ($var)的结果与if (to_bool($var))相同。

您是否认为!! $ var是检查to_bool($ var)的更快方法? 真的只是出于好奇! 如果有的话,差异显然可以忽略不计!

if($var)是最快的,但是是的,差异可以忽略不计。

您也可以从类型转换的角度来看这件事。在PHP中,对值执行逻辑表达式将得到布尔结果。因此,第一个否定隐式将值强制转换为布尔值,而第二个求反只是将第一个否定的取反。您可以使用其他逻辑运算符执行相同的操作(尽管我不建议这样做,因为某些优先级不同):

// using"truthy" 2 as a value //

!!2          // true

2 ||  false  // true

2 &&  true   // true

2 xor false  // true

// using"falsey" 0 as a value //

!!0         // false

0 ||  false // false

0 &&  true  // false

0 xor false // false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值