【问题标题】:Print false in php [closed]在php中打印错误[关闭]
【发布时间】:2012-07-16 21:17:08
【问题描述】:

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

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 syntax boolean


    【解决方案1】:

    您的问题来自您对 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 字符串,when added (not contacted),计算结果为 0。所以这个语句的计算结果是:

    print 0 + 0 + 1 + 0;
    

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

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

    根据 PHP 的松散类型(如果你问我,这很糟糕),任何将 evaluate to true 的东西都会写成“True”。我仍然不鼓励使用 function calls in PHP are expensive 的函数来执行此操作。

    【讨论】:

    • 解释将很快跟进...但已经 +5 :P 现在 是炒作!
    • 一个很好的解释并不能解决我的问题
    • “月亮是奶酪做的。不是真的,只是解释。”
    • @RandallFlagg 可能是因为您在网络浏览器中查看它。在浏览器中选择“查看源代码”或将换行符更改为<br>s。
    • 在我点击 Cole Johnson 的个人资料发现他 15 岁之前,我就在这个线程中。感谢 Cole Johnson。我 21 岁时开始考虑类型系统。
    【解决方案2】:

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

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

    输出:false true

    【讨论】:

    • @Lion 你知道如何将它们打印成两行吗?
    • echo $boolarray[false],"<br/>", $boolarray[true];?只需使用换行符<br/>
    • 不是我想要的答案,但它必须这样做。我更喜欢语言内的解决方案,所以我不需要每次都贴花/导入这个数组。
    • 请参阅this 问题。我在回答中提到的也在那里。我刚刚找到它。另外,尝试了echo (int)$bool_val;,正如答案中提到的那样,但不幸的是它也没有用。
    • @Lion 我试过了。我也试过 Intval。还是谢谢。
    猜你喜欢
    • 2020-10-07
    • 2017-11-08
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多