我的索引文件是
<body>
<form method="POST" action="post.php" >
<input name="name">
<input type="submit" value="submit">
</form>
</body>
和post.php是
<?php
$sec = 'qaswed';
if($sec == $_POST['name'])
{
echo "true";
}
else
{
echo "false";
}
?>
[当我在post.php文件中简单地用$ _POST ['name']代替TRUE时,无论我在索引文件中提交什么,结果都是正确的,即是
if($sec == TRUE) { echo "true"; } else { echo "false"; }//true
但是,如果在索引文件中,如果我在name参数中发送TRUE,那么输出为何为假..即
if($sec == $_POST['name']) { echo "true"; } else { echo "false"; }// false when name=TRUE
当我从其他页面变量(请求)发送此消息时,它的计算结果为false。为什么会发生?
[如果写为($sec == TRUE)
,则为true
,因为您正在通过==
运算符使用自动类型转换,而php将$sec
字符串转换为bool类型,因为它不是(bool)false
(不是字符串'false'!!!!)或(int)0
,它将变为true,然后true === true = true
。
如果您不希望php自动转换if中的值,请使用===
而不是==
,这也会检查类型。
在另一种情况下,您发送的是“ true”字符串,而您拥有的“ qaswed”字符串显然不相同,并且由于它们都是字符串,因此没有像上一种情况那样进行类型转换。
我刚刚添加了“ if(isset($ _ POST ['name']))”以检查是否设置了名称
// post.php
<?php
if (isset($_POST['name']))
{
$sec = 'qaswed';
if ($sec == $_POST['name'])
{
echo "true";
}
else
{
echo "false";
}
}
?>
在字符串'qaswed'的第一个比较值中,会自动将其强制转换为布尔值,以比较布尔值。比较不同的数据类型时,其中一种将转换为另一种类型。
如果您还想比较变量的类型,则应使用相同比较运算符。
var_dump('qaswed'); // string(6) "qaswed"
var_dump((bool)'qaswed'); // bool(true)
var_dump('qaswed' == true); // bool(true)
var_dump('qaswed' === true); // bool(false)
在第二种情况下,您比较字符串类型。
var_dump('TRUE'); // string(4) "TRUE"
var_dump('qaswed'); // string(6) "qaswed"
var_dump('qaswed' == 'TRUE'); // bool(false)
var_dump('qaswed' === 'TRUE'); // bool(false)