我正在尝试打印以下语句:
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 有人可以解释为什么以及如何使它以正确的方式打印吗?
您的问题来自您对+
PHP 中字符串运算符的误解。字符串连接运算符.
就像 PHP 是松散类型的,它不知道您是要连接还是添加字符串。
我给你分解一下:
print false + "\n" + true + "\n";
echo false+(bool)false + "\n" + true + "\n";
print "0" + "\n" + true + "\n";
首先,您可能想选择留下来echo
或print
。现在,继续:
print false + "\n" + true + "\n";
PHP 字符串,当添加(未联系)时,评估为0
. 因此,此语句的计算结果为:
print 0 + 0 + 1 + 0;
这是1
。其他人也纷纷效仿。如果您希望您的代码工作,您应该使用连接运算符 ( .
)。如果您想编写True
或False
喜欢 .NET 的方式,您可以编写一个简单的函数:
function writeBool($var)
{
echo ($var) ? "True" : "False";
}
根据 PHP 的松散类型(如果你问我,这很糟糕),任何将评估为 的true
东西都会写成“True”。我仍然不鼓励使用函数来执行此操作,因为PHP 中的函数调用很昂贵。
这应该可以解决问题。使用数组。
$boolarray = Array(false => 'false', true => 'true');
echo $boolarray[false]," ", $boolarray[true];
输出 :false true