2

我正在尝试打印以下语句:

print false . "\n" . true . "\n";
echo false . (bool)false . "\n" . true . "\n";
print "0" . "\n" . true . "\n";

我得到的结果只是“1 1 0 1”。预期结果是:

0
1
0
1
0
1

我正在使用 PHP 5.4.3 MSVC9 x64 有人可以解释为什么以及如何使它以正确的方式打印吗?

4

2 回答 2

10

您的问题来自您对+PHP 中字符串运算符的误解。字符串连接运算符.就像 PHP 是松散类型的,它不知道您是要连接还是添加字符串。

我给你分解一下:

print false + "\n" + true + "\n";
echo false+(bool)false + "\n" + true + "\n";
print "0" + "\n" + true + "\n";

首先,您可能想选择留下来echoprint。现在,继续:

print false + "\n" + true + "\n";

PHP 字符串,当添加(未联系)时,评估为0. 因此,此语句的计算结果为:

print 0 + 0 + 1 + 0;

这是1。其他人也纷纷效仿。如果您希望您的代码工作,您应该使用连接运算符 ( .)。如果您想编写TrueFalse喜欢 .NET 的方式,您可以编写一个简单的函数:

function writeBool($var)
{
    echo ($var) ? "True" : "False";
}

根据 PHP 的松散类型(如果你问我,这很糟糕),任何将评估为 的true东西都会写成“True”。我仍然不鼓励使用函数来执行此操作,因为PHP 中的函数调用很昂贵

于 2012-07-16T21:19:55.370 回答
2

这应该可以解决问题。使用数组。

$boolarray = Array(false => 'false', true => 'true');
echo $boolarray[false],"  ", $boolarray[true];

输出 :false true

于 2012-07-16T21:33:50.083 回答