php - PHP 中的 if ($check)、if (!$check) 和 if (!!$check) 有什么区别?
问题描述
和有什么区别
if ($check)
if (!$check)
if (!!$check)
为什么?
解决方案
最后,双方
if ($check)
和
if (!!$check)
最终检查是否$cond
是真实值。
众所周知,!
运营商就是not
运营商。就这样!true
变成了false
。当你这样做时!false
,它就变成了真的!在做的时候!!
(这是两次应用的非运算符,仅此而已),把它想象成!(!true)
,它最终返回为真(“不是不真”)。
这对于布尔值来说是微不足道的,但其他值呢?在 PHP 中,您可以将任何值作为if
语句的条件。有很多值是“真实的”,这意味着true
如果放在一个条件下它们就会产生结果。那么究竟会发生什么?
在这里,我们将非运算符!
两次应用于不同的值,看看我们得到了什么。
# Test // Description -- result
# -----------------------------------------------------------------
var_dump(!![]); // Empty array -- boolean false
var_dump(!![48]); // Non-empty array -- boolean true
var_dump(!!0); // Zero -- boolean false
var_dump(!!38); // Non-zero -- boolean true
var_dump(!!""); // Empty string -- boolean false
var_dump(!!"foo"); // Non-empty string -- boolean true
var_dump(!!(new stdClass())); // Empty object -- boolean true
var_dump(!!null); // null -- boolean false
- 在https://3v4l.org/81SJE进行现场演示
从上面的结果可以看出,它会将值类型转换为布尔值,这与做
if ((bool)$check)
最后,做任何一个if ((bool)$check)
,if (!!$check)
或if ($check)
都将导致相同的结果 - 对于真值,该条件将为真。差异最终是在哪里评估的。两者首先发送一个布尔值作为条件,最后一个发送值本身并检查条件中的真值。
至于if (!$check)
,这只是应用了一次的非运算符,它将反转它并转换为布尔值(因此任何“假”值都变为真,任何“真”值变为假)。
推荐阅读
- java - 使用 setItems 方法将数据输入 TableView
- php - Laravel 重置密码电子邮件不适用于生产
- python - 为什么 Python 停止使用 GPU 并在运行时切换到 CPU
- go - Golang Serverless 离线
- apache-kafka - Kafka Stream - kafka 生产者 I/O 线程中未捕获的错误:java.util.ConcurrentModificationException:null
- python - 如何遍历 json 对象
- apache-spark - 如何使用 spark 加快训练 Word2vec 模型?
- c# - IDE0063 什么时候处理?
- .net - Google Content API - 新版本
- kubernetes - kubernetes pod kube-dns 不断重启