Dla zaawansowanych użytkowników PHP, znając różnicę między ==
i ===
i zadając sobie pytanie „czy jest szybsze porównanie z ==
lub z, ===
gdy jestem pewien, że oba operandy są tego samego typu?”
Krótka i ogólna odpowiedź brzmi: w takich przypadkach nie ma wzrostu wydajności ===
, więc prawdopodobnie powinieneś użyć ==
.
Osoby zainteresowane samodzielnym testowaniem porównawczym mogą skorzystać z następującego kodu, który napisałem ad-hoc i wypróbować różne wartości dla $a
i $b
:
<?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";
?>
UWAGA: Porównanie jest ważne tylko wtedy, gdy każda „PIERWSZA PRÓBA” jest bardzo bliska jej „DRUGIEJ PRÓBY”. Jeśli są znacząco różne, oznacza to, że procesor był zajęty robieniem czegoś innego podczas wykonywania porównań, więc wyniki są niewiarygodne i benchmark należy uruchomić ponownie.