PHP true &

5 Cevap

Hızlı bir soru. Arasında bir fark var mı

$success = true;

ve

$success = 'true';

Ben onlar '==' birbirine değil biliyorum, ama bunları kullanarak bir fark var?

EDIT: I found that using '===' instead of '==' when seeing if $success is false solved my problem. My question now is that, should I just use strings in a case like below, ve stick with '=='?

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

İşte sınıfın parçası ..

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

5 Cevap

Herhangi bir boş olmayan bir dize true değerlendirir ve boş bir dize yanlış olarak değerlendirir. Aşağıdaki script sizin için biraz ışık tutabilir:

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

?>

İşte çıktı:

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

İstendiği gibi, burada çeşitli değerleri için === ile == karşılaştırarak biraz daha örneklerdir.

<?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 />";
}

?>

Çıktı:

'true' vs. true

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

'false' vs. true

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

1 vs. true

1 == true
1 !== true

0 vs. false

0 == false
0 !== false

1 vs. 'true'

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

empty string '' vs. false

'' == false
'' !== false

Önce bir boolean. 2. bir dizedir

Bu onların farkı görebilirsiniz.

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

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

Ve ayrıca bundan sonucunu kontrol edin

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

Ayrıca this type comparison table. Gerçek düzgün bilgi çalışma ve biraz daha PHP anlamamıza yardımcı olur gerekir.

Ben kesinlikle olumlu bir boolean cevap gerektiğinde ben hep bu yüzden, === veya !== daha kısıtlayıcı kullanmayı deneyin:

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

Sadece durumda.

gerçek 'gerçek' bir dize, bir boolean.

Evet bir fark yoktur. PHP değişken (ya da hemen hemen herhangi bir programlama dili) Her değer bir "tür" vardır. Tırnak bir değer atama / oluştururken,

$foo = 'true';

Kimin türü bir dize olan bir değer yaratıyor ve tırnak işaretleri olmadan bir değer atama / oluştururken, kimin boolean tipinde bir değişken yaratıyor

$bar = true;

Bazı diğer modern, dinamik diller gibi, PHP türü gibi şeyler hakkında endişelenmenize gerek yok böyle bir şekilde şeyleri düzenlemek için gerçekten zor çalışır. Örneğin, dil bir sürü onlar aynı türden değilse iki değişkenin eşitliğini karşılaştırmak izin, bu yüzden bir şey gibi GEÇMEZ

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

Python geçerli kod (bir istisna alırsınız) değildir. PHP, diğer taraftan, güzel olmaya çalışır ve (perde arkasında) bir eşitlik operasyonda herhangi bir dizeyi kullanabilirsiniz eğer sıfır uzunlukta bir sürece "iyi, biz dize türü mantıksal ve gerçek olduğunu iddia edeceğiz diyor dizesi ". Bu nedenle, zaman% 90, ya yapıyor paçayı bulunuyor.

However, farklılıklar vardır. PHP kenara bir mantıksal yok daha bir dize için daha fazla bellek ayarlamak için ihtiyaçları çalışan bilgiçlik taslayan, bilgisayar ile başlamak için. Bu gün ve yaş olarak önemsiz bir miktarda bulunuyor, ancak atık / istemiyor değil.

Daha da önemlisi, PHP'nin tip zorlama hiçbir mantıklı garip şeyler yapar zamanlar vardır. Örneğin, aşağıdakileri dikkate

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

Bu ifade "gerçek" == true doğru olarak değerlendirir beri, sezgisel bunun doğru yankı şey olur olsa bile, "false" yankılanacak. PHP görünüşte garip şekillerde hareket nerede bu gibi kenar durumlarda bir yeri vardır. Yani, genel durum kolaylaştırmak için çalışırken (halkı için değişkenleri dönüştürmek izin), onlar hata aşağı izlemek zor yol açabilir, bazı daha az yaygın durumlarda daha karmaşık yaptı. Takım üzerinde bazı insanlar sahneleri zorlama arkasında anlamak şeyler gerçekten yamuk yumuk olsun, ve diğerleri yok.

Yani, ve büyük, başarı iade yöntemleri ve işlevleri açık booleans (tırnak) dönmek için her zaman en iyisidir. Deneyimli programcılar ve deneyimsiz programcılar pop-up dizeleri yerine kullanılan bu hataların bazıları tarafından şaşırmış olacak bekliyoruz.