Php 布尔输入翻转

Php 布尔输入翻转,php,Php,我在接受布尔输入的php脚本上得到了非常奇怪的结果。其思想是数据需要存储为1或0,但php脚本的输入是一个true/false格式的字符串。看看这个: <?php function boolToBinary($str) { echo $_POST['wants_sms'] . " " . $str; die(); // posting this so that you can see what this function is su

我在接受布尔输入的php脚本上得到了非常奇怪的结果。其思想是数据需要存储为1或0,但php脚本的输入是一个true/false格式的字符串。看看这个:

<?php
    function boolToBinary($str) {
        echo $_POST['wants_sms'] . " " . $str;
        die();

        // posting this so that you can see what this function is supposed to do
        //    once it is debugged
        if ($str == true) {
            return 1;
        } else {
            return 0;
        }
    }

    $gets_sms = boolToBinary($_POST['wants_sms']); 
这怎么可能???谢谢你的建议

编辑:解决方案:仍然不确定为什么我的输出被翻转,但基本问题是这样解决的:

if ($str === 'true') {
    return 1;
} else {
    return 0;
}
感谢RocketHazmat的帮助

请参见此示例:

var_dump((bool)“false”);//布尔(真)

解释如下:

转换为布尔值时,以下值被视为FALSE:

空字符串和字符串“0”

其他所有值均视为真(包括任何资源)


在您的例子中,
$\u POST['wants\u sms']
变量包含一个字符串
“false”

如果输入是字符串,为什么要像检查实际bool一样进行检查。它是布尔值还是非布尔值?POST值始终是字符串
$\u POST['wants\u sms']
永远不会是布尔值。很可能是
$\u POST['wants\u sms']
是字符串
“true”
。试试这个
返回$bool=='true'?1 : 0;
@Asok没什么奇怪的,他只是在调试脚本。他向我们展示了
死亡前的价值观
。我真诚地怀疑你发布的代码能否产生你展示给我们的输出。你所做的只是(以一种迂回的方式)这样:
echo$\u POST['wants\u sms']。" " . $_发布['wants_sms']
;真的没有任何方法可以输出
false-true
@Asok啊,是的,我同意这一部分。发布的代码似乎不可能产生这样的结果,但奇怪的是他从不打字。他通过
\u POST['want\u sms']
(它
='false'
),然后在任何类型转换到bool之前回显变量
true
。是的,我知道了。但所描述的输出最可能的原因可能是他在某处转换为布尔。他忘了在示例中提到这一点。相反,我认为他只是在将代码复制到堆栈溢出中时做得很糟糕。如果他没有看到
“false-true”
,那么他可能不会在这里发布。我希望。。。
if ($str === 'true') {
    return 1;
} else {
    return 0;
}