PHP true & 'true' разница

Быстрый вопрос. Есть ли разница между

$success = true; 

а также

 $success = 'true'; 

Я знаю, что они не ' == ' друг к другу, но есть ли разница в их использовании?

EDIT: Я обнаружил, что использование '===' вместо '==', когда вы видите, что $ success ошибочно решает мою проблему. Мой вопрос теперь в том, что, если я просто использую строки в случае, как показано ниже, и придерживаюсь '=='?

  $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>"; } 

Вот часть класса ..

  function ProcessLogin() { if (!empty($_POST['username']) && !empty($_POST['password'])) { $username = mysql_real_escape_string($_POST['username']); $password = md5(mysql_real_escape_string($_POST['password'])); $checklogin = mysql_query("SELECT * FROM users WHERE Username = '".$username."' AND Password = '".$password."'"); if(mysql_num_rows($checklogin) == 1) { $row = mysql_fetch_array($checklogin); $email = $row['EmailAddress']; $_SESSION['Username'] = $username; $_SESSION['EmailAddress'] = $email; $_SESSION['LoggedIn'] = 1; $this->loggedin = true; $success = true; } else { $success = false; } return $success; } } 

Related of "PHP true & 'true' разница"

Любая непустая строка вычисляет значение 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"; } ?> 

Вот результат:

 'true' == true 'false' == true 'foo' == true 'false' != false '' != true '' == 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' vs. true

 'true' == true 'true' !== true 

'false' vs. true

 'false' == true 'false' !== true 

1 против истинного

 1 == true 1 !== true 

0 против ложных

 0 == false 0 !== false 

1 против "истины"

 1 != 'true' 1 !== 'true' 

пустая строка '' vs. false

 '' == false '' !== false 

Сначала это логическое значение. 2-я строка

Вы можете видеть их разницу с этим.

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

А также проверить результат из этого

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

Вы также должны изучить таблицу сравнения этого типа. Реальная аккуратная информация и помогает понять PHP немного больше.

Я всегда стараюсь использовать более ограничительные === или !== когда мне абсолютно нужен логический ответ, поэтому:

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

На всякий случай.

true является логическим, «true» является строкой.

Да, есть разница. Каждое значение в переменной PHP (или почти любом языке программирования) имеет «тип». При создании / присвоении значения кавычками,

 $foo = 'true'; 

вы создаете значение, тип которого является строкой, а при создании / присваивании значения без кавычек вы создаете переменную, тип которой является логическим

 $bar = true; 

Как и другие современные, динамические языки, PHP действительно пытается уладить вещи таким образом, что вам не нужно беспокоиться о таких вещах, как тип. Например, многие языки НЕ позволяют сравнивать равенство двух переменных, если они не одного типа, поэтому что-то вроде

 if('true' == True) ... 

недействительный код в python (вы получите исключение). С другой стороны, PHP пытается быть приятным и (за кулисами) говорит: «Хорошо, если вы используете какую-либо строку в операции равенства, мы будем притворяться, что строка имеет тип boolean и true, если только она не является нулевой строка». Вот почему, 90% времени, вы можете уйти с этим.

Однако есть различия. Чтобы начать с педантичного, компьютер, на котором работает PHP, должен выделить больше памяти для строки, чем для логического. В этот день и возраст это тривиальное количество, но отходы не хотят / не хотят.

Что еще более важно, иногда бывают случаи, когда принуждение типа PHP делает странные вещи, которые не имеют никакого смысла. Например, рассмотрим следующие

 if ("false" == false) { echo "true\n"; } else { echo "false\n"; } 

Этот оператор будет эхом «ложь», хотя интуитивно вы бы хотели, чтобы он возвращался к истине, поскольку «true» == true оценивается как истинный. Есть много таких крайних случаев, когда PHP будет действовать по-видимому странно. Таким образом, пытаясь сделать общий случай проще (давайте преобразуем переменные для людей), они сделали несколько менее распространенных случаев более сложными, что может привести к сложному отслеживанию ошибок. Вещи становятся действительно суровыми, когда некоторые люди в вашей команде понимают, что за кулисами принуждение, а другие нет.

Таким образом, по большому счету, всегда лучше возвращать явные булевы (без кавычек) из методов и функций, которые возвращают успех. Опытные программисты ожидают этого, и неопытные программисты будут сбиты с толку некоторыми ошибками, которые появляются, когда используются строки.