3 farklı eşittir

7 Cevap php

Birisi bana =, == arasındaki farkı açıklamak, Can ve ===? Ben bir eşit işareti kullanılarak iki eşit işaretleri bir karşılaştırma durum için ve son olarak üç eşit işaretleri bildirilen değişkenler değerlerini karşılaştırmak için ise bir değişkeni bildirmek için olduğunu düşünüyorum.

7 Cevap

Bu = assignment operator, == 'equal' comparison operator ve === 'identical' comparison operator vardır.

$a = $b     Assign      Sets $a to be equal to $b.
$a == $b    Equal       TRUE if $a is equal to $b.
$a === $b   Identical   TRUE if $a is equal to $b, and they are of the same type. (introduced in PHP 4) 

Daha == ve === için ihtiyaç bilgi ve her kullanmak durumlar için, the docs bakmak.

= Atama operatörü

== Kontroller iki değişken aynı değeri varsa

=== Kontroller iki değişken aynı değere sahip ve eğer onların tipleri aynı ise

Gelişmiş bir PHP kullanıcılar için, == ve === arasındaki farkı bilmek ve kendilerini soran "o == veya === ile karşılaştırmak daha hızlıdır Her iki işlenen aynı türde olduğundan emin olduğum zaman? "

Kısa ve genel cevap:. Muhtemelen kullanmak gerekir there is no performance gain in using === Bu durumda, bu yüzden ==

O kendilerini kıyaslama ilgilenen olanlar için, ben ad-hoc yazdı aşağıdaki kodu kullanabilirsiniz ve $a ve $b için farklı değerler deneyebilirsiniz:

<?php

// CONFIGURATION
$cycles = 1000000;
$a = 'random string 1';
$b = 'random string 2';

// FUNCTIONS
function compare_two_equals($a, $b) {
    if ($a == $b) {
        return TRUE;
    } else {
        return FALSE;
    }
}

function compare_three_equals($a, $b) {
    if ($a === $b) {
        return TRUE;
    } else {
        return FALSE;
    }
}

// EXECUTION
$time = microtime(TRUE);
for ($count_a = 0; $count_a < $cycles; $count_a++) {
    compare_two_equals($a, $b);
}
$time_two_a = microtime(TRUE) - $time;
$time = microtime(TRUE);
for ($count_a = 0; $count_a < $cycles; $count_a++) {
    compare_three_equals($a, $b);
}
$time_three_a = microtime(TRUE) - $time;
$time = microtime(TRUE);
for ($count_a = 0; $count_a < $cycles; $count_a++) {
    compare_two_equals($a, $b);
}
$time_two_b = microtime(TRUE) - $time;
$time = microtime(TRUE);
for ($count_a = 0; $count_a < $cycles; $count_a++) {
    compare_three_equals($a, $b);
}
$time_three_b = microtime(TRUE) - $time;
$time = microtime(TRUE);

// RESULTS PRINTING
print "<br />\nCOMPARE == (FIRST TRY): " . number_format($time_two_a, 3) . " seconds";
print "<br />\nCOMPARE == (SECOND TRY): " . number_format($time_two_b, 3) . " seconds";
print "<br />\nCOMPARE === (FIRST TRY): " . number_format($time_three_a, 3) . " seconds";
print "<br />\nCOMPARE === (SECOND TRY): " . number_format($time_three_b, 3) . " seconds";

?>

NOT: Her bir "İLK YTL" onun "İKİNCİ YTL" çok yakın olduğunda karşılaştırma geçerlidir. Önemli ölçüde farklı ise, bu işlemci karşılaştırmalar yürütülürken başka bir işle meşgul oldu ve böylece sonuçları güvenilmez ve kriter tekrar çalıştırmak gerektiği anlamına gelir.

Sen = atama operatörü olduğunu haklısın. Diğer iki size here hakkında daha fazla bilgi bulabilirsiniz karşılaştırma operatörleri vardır.

Herkes Ben sadece daha bunu açıklamak için bir örnek eklemek istiyorum .. açıklık var ..

<?php
$mystring = 'abc';
$findme   = 'a';
$pos = strpos($mystring, $findme);

// Note our use of ===.  Simply == would not work as expected
// because the position of 'a' was the 0th (first) character.
if ($pos === false) {
    echo "The string '$findme' was not found in the string '$mystring'";
} else {
    echo "The string '$findme' was found in the string '$mystring'";
    echo " and exists at position $pos";
}
?> 

Belki daha iyi otomatik döküm içeren bir örnekle == ve === arasındaki farkı anlayabilir:

echo '"5 is not a number" == 5'."\n";
if("5 is not a number" == 5) {
  echo "maybe there is something wrong here\n";
} else {
  echo " The integer and the string are different\n";
}
echo '"5 is not a number" === 5'."\n";
if("5 is not a number" === 5) {
  echo "maybe there is something wrong here\n";
} else {
  echo " The integer and the string are different\n";
}