PHP真实&';正确';差异

PHP真实&';正确';差异,php,Php,快速提问。两者之间有区别吗 $success = true; 及 我知道它们彼此不是“=”,但使用它们有什么区别吗 编辑:我发现在查看$success是否为false时使用“==”而不是“==”解决了我的问题。我现在的问题是,我是否应该在下面这样的情况下使用字符串,并坚持使用“==” $User->ProcessLogin(); $loginsuccess = $User->ProcessLogin(); if ($loginsuccess == true) {

快速提问。两者之间有区别吗

$success = true;

我知道它们彼此不是“
=”
,但使用它们有什么区别吗

编辑:我发现在查看$success是否为false时使用“==”而不是“==”解决了我的问题。我现在的问题是,我是否应该在下面这样的情况下使用字符串,并坚持使用“==”

    $User->ProcessLogin();
$loginsuccess = $User->ProcessLogin();

if ($loginsuccess == true) {    
    echo "<big>Success<big><br />";
        echo "<p>We are now redirecting you to the member area.</p>";
        echo "<meta http-equiv='refresh' content='=2;MyAccountNEW.php' />";
}
elseif ($loginsuccess == false) {
        echo "<span class='sorry'><b>Sorry, your account could not be found.</span></b><div id='shopperlogin'> <img class='shopperlogintext' src='images/shopperlogin.png'>

   <br />

    <form method='post' action='loginNEW.php' name='loginform' id='loginform'>
    <fieldset>
        <label for='username'>Username:</label><input type='text' name='username' id='username' /><br />
        <label for='password'>Password:</label><input type='password' name='password' id='password' /><br />
        <input type='submit' name='login' id='login' value='Login' />
    </fieldset>
    </form></div>";
    }

true是布尔值,“true”是字符串。

第一个是布尔值。第二个是字符串

你可以从中看出他们的不同

$success = 'true';
$success2 = true;

var_dump($success);
var_dump($success2);
同时也检查一下这个结果

var_dump($success == $success2);
var_dump($success === $success2);

您还应该学习真正简洁的信息,帮助您更好地理解PHP。

任何非空字符串的计算结果都是true,空字符串的计算结果都是false。以下脚本可能会为您提供一些帮助:

<?php
if('true' == true) {
  echo "'true' == true";
} else {
  echo "'true' != true";
}

echo '<br />';

if('false' == true) {
  echo "'false' == true";
} else {
  echo "'false' != true";
}

echo '<br />';

if('foo' == true) {
  echo "'foo' == true";
} else {
  echo "'foo' != true";
}

echo '<br />';

if('false' == false) {
  echo "'false' == false";
} else {
  echo "'false' != false";
}

echo '<br />';

if('' == true) {
  echo "'' == true";
} else {
  echo "'' != true";
}

echo '<br />';

if('' == false) {
  echo "'' == false";
} else {
  echo "'' != false";
}

?>
根据要求,下面是一些比较==和===各种值的更多示例

<?php
echo "<b>'true' vs. true</b><br />";

if('true' == true) {
  echo "'true' == true<br />";
} else {
  echo "'true' != true<br />";
}

if('true' === true) {
  echo "'true' === true<br />";
} else {
  echo "'true' !== true<br />";
}

echo "<br /><b>'false' vs. true</b><br />";

if('false' == true) {
  echo "'false' == true<br />";
} else {
  echo "'false' != true<br />";
}

if('false' === true) {
  echo "'false' === true<br />";
} else {
  echo "'false' !== true<br />";
}

echo "<br /><b>1 vs. true</b><br />";

if(1 == true) {
  echo "1 == true<br />";
} else {
  echo "1 != true<br />";
}

if(1 === true) {
  echo "1 === true<br />";
} else {
  echo "1 !== true<br />";
}

echo "<br /><b>0 vs. false</b><br />";

if(0 == false) {
  echo "0 == false<br />";
} else {
  echo "0 != false<br />";
}

if(0 === false) {
  echo "0 === false<br />";
} else {
  echo "0 !== false<br />";
}

echo "<br /><b>1 vs. 'true'</b><br />";

if(1 == 'true') {
  echo "1 == 'true'<br />";
} else {
  echo "1 != 'true'<br />";
}

if(1 === 'true') {
  echo "1 === 'true'<br />";
} else {
  echo "1 !== 'true'<br />";
}

echo "<br /><b>empty string '' vs. false</b><br />";

if('' == false) {
  echo "'' == false<br />";
} else {
  echo "'' != false<br />";
}

if('' === true) {
  echo "'' === false<br />";
} else {
  echo "'' !== false<br />";
}

?>
“假”与“真”

'true' == true
'true' !== true
'false' == true
'false' !== true
1 == true
1 !== true
0 == false
0 !== false
'' == false
'' !== false
1与真实值的比较

'true' == true
'true' !== true
'false' == true
'false' !== true
1 == true
1 !== true
0 == false
0 !== false
'' == false
'' !== false
0 vs.false

'true' == true
'true' !== true
'false' == true
'false' !== true
1 == true
1 !== true
0 == false
0 !== false
'' == false
'' !== false
1对“真”

1 != 'true'
1 !== 'true'
空字符串“”与假字符串的比较

'true' == true
'true' !== true
'false' == true
'false' !== true
1 == true
1 !== true
0 == false
0 !== false
'' == false
'' !== false

我总是尝试使用限制性更强的
==
==当我绝对需要布尔答案时,因此:

$success = 'true';
if( $success === 'false'){
...
}

以防万一。

是的,有区别。PHP变量(或几乎任何编程语言)中的每个值都有一个“类型”。创建/分配带引号的值时

$foo = 'true';
您正在创建一个类型为字符串的值,在创建/分配一个不带引号的值时,您正在创建一个类型为布尔型的变量

$bar = true;
像其他一些现代动态语言一样,PHP非常努力地以一种您不必担心类型之类的事情的方式来安排事情。例如,如果两个变量的类型不同,许多语言都不允许比较它们的相等性,因此

if('true' == True) ... 
不是python中的有效代码(您将得到一个异常)。另一方面,PHP试图表现得很好,并且(在幕后)说“如果在相等操作中使用任何字符串,我们将假装该字符串是布尔类型和true,除非它是零长度字符串”。这就是为什么,90%的情况下,你可以不做任何一件事

然而存在差异。首先,运行PHP的计算机需要为字符串留出比布尔值更多的内存。在这个时代,这是一个微不足道的数目,但不浪费/不匮乏

但更重要的是,有时PHP的类型强制会做一些毫无意义的奇怪事情。例如,考虑下面的

if ("false" == false) { 
    echo "true\n";
} else {
    echo "false\n";
}
此语句将回显“false”,即使您直觉上认为它会回显为true,因为“true”==true的计算结果为true。有很多像这样的边缘案例,PHP会以看似奇怪的方式运行。因此,为了使一般情况更简单(让我们为人们转换变量),他们将一些不太常见的情况变得更复杂,这可能导致难以追踪bug。当你团队中的一些人理解幕后的胁迫,而其他人却不理解时,事情就会变得非常棘手


因此,总的来说,最好从返回成功的方法和函数中返回显式布尔值(无引号)。有经验的程序员期待它,而没有经验的程序员将被使用字符串时弹出的一些错误所困扰

我还强烈怀疑使用字符串进行==比较的速度较慢,因为您必须比较整个字符串。因此,这也算是一个差异。您可以添加一些带有===的示例以进行更全面的演示吗?根据要求添加的示例,如果您明确希望看到其他示例,请告诉我。此示例没有检查布尔值false,它检查一个“false”字符串。您可以让它简单得多,因为您只关心是否设置了loginstatus,而不管它设置为什么。var$loginsucess在默认情况下始终为空,除非返回了某些内容(无论什么)。因此,在ProcessLogin()函数中,只需“return true;”,而不用$success变量。然后测试:if($loginsucess){//很好,它工作了}else{//失败}。最好使用原始表单,而不是在出现重复代码时输出相同的表单。然后,当需要更改某些内容时,您只需修复原始/单个表单。