“真实”或真实,哪个更合适

时间:2011-11-05 23:00:29

标签: php conditional

我有一个需要专家建议的技术问题。我在数据库中有一个数据字符串“true”。但是当我检索它以测试条件时,哪一条更适合使用,即使它们都有效。

if ($data == true)

if ($data == "true")

我的直觉是使用“true”来测试存储的值是否为字符串,并在数据库值存储为布尔值时使用不带引号的true。但是想和你们确认一下。

...谢谢

5 个答案:

答案 0 :(得分:4)

确认,至少差不多。您也可以检查数据类型,但是在PHP中,您需要使用===运算符:

if ($data === TRUE) # boolean
if ($data === "true") # string

它被称为identical operator Docs,它将值的类型进行比较。通常很有用。

答案 1 :(得分:1)

如果是字符串,那么$data == "true"就是你想要的。

表达式($data == true)相当于($data),因此即使true

,它也会评估为$data == "false"

答案 2 :(得分:0)

要理解的重要案例是,如果值应为false,则数据库的值将是什么。

如果数据库返回"false",您检查$val == true$val == "true",只有后者才会提供正确的结果。

您可能需要咨询php type comparison tables,以确保您了解您正在检查的内容。

此外,数据库是否有可能返回以下其中一项?

"true"
"True"
"TRUE"
"TrUe"

只需规范化或清理数据库值(理想情况下,在布尔字段中存储二进制值,以便不需要这样做。

答案 3 :(得分:0)

"false"==true是真的。

如果您的数据库的列只有“true”或“false”,那么效率很低。将列转换为tinyint(或bool)。

否则,当您将数据库中的字符串值从数据库中拉出时,应考虑将"true""false"的字符串值切换为布尔值truefalse。 / p>

答案 4 :(得分:0)

如果值在字面上按字母顺序存储在数据库中,则第二个(if ($data = "true"))就是你想要的,尽管它们都可以工作。为清晰起见,我建议第二个。

您可以使用交互式shell对命令进行测试。

php -a
Interactive shell

php > $x = "true";
php > echo ($x == true) ? "True!" : "oops";
True!
php > echo ($x == "true") ? "True!" : "oops";
True!
php > echo ($x === "true") ? "True!" : "oops";
True!
php > echo ($x === true) ? "True!" : "oops";
oops

请注意===的效果。由于该值是字符串,因此在使用===时它们不相等。