2009-11-03 20 views
18

Wiem, że to pytanie nie jest jednak bardzo ważne .. Zastanawiałem się:

Które z poniższych IF jest najlepszy i najszybszy w użyciu?

<?php 

$variable = true; 

if($variable === true) 
{ 
    //Something 
} 

if($variable) 
{ 
    // Something 
} 


?> 

Wiem, że === to dopasowanie dokładnie wartości boolowskiej. Czy naprawdę jest jakaś poprawa?

+0

Próbowałem i nie mogę potwierdzić Twojego roszczenia. –

Odpowiedz

45

Używanie if ($var === true) lub if ($var) nie jest kwestią stylu, ale kwestią poprawności. Ponieważ if ($var) jest taki sam jak if ($var == true). I porównanie == nie sprawdza typu. Tak więc 1 == true jest prawdziwe, ale 1 === true jest fałszywe.

5

=== jest naprawdę pomocna w strstr/stristr, gdy pierwsza igła znajduje się w pozycji 0 w stogu siana. Jeśli nie używasz === lub! == możesz mieć błąd na swoich rękach.

$str = "four score and..."; 
$position = strstr($str,'four'); 
if($position===FALSE) return FALSE; 
+2

Mały komentarz do twojego kodu: Zawsze używałbym nawiasów klamrowych {} wokół bloku kodu po poleceniu if. Wiem, że to nie jest konieczne, ale imho to jest dobre dla czytelności. –

4

nie jestem w głąb materiału technicznego PHP, ale w pierwszym przypadku

if($variable === true) 

$ zmienna musi mieć dokładnie ten sam typ jak prawdziwe dla if aby mogło być prawdziwe . Innymi słowy zmienna $ nie tylko musi być prawdziwa, ale musi również być wartością logiczną. To jest 2 operacje, sprawdzanie wartości i sprawdzanie typu.

W drugim przypadku

if($variable) 

$ zmienna ma tylko rozwiązać true. Dlatego występuje tylko sprawdzanie wartości. Wnioskuję, że zabiera to komputerowi trochę mniej czasu.

Praktycznie rzecz biorąc: różnice w prędkości są prawdopodobnie nieistotne.

7

Jeśli chodzi o prędkość, zgadzam się z Nielsem, to prawdopodobnie nieistotne.

Jeśli chodzi o to, w której instrukcji najlepiej przetestować, odpowiedź prawdopodobnie zależy od oczekiwanego rzutowania i wartości, które może mieć zmienna $.

Jeśli zmienna $ używa 0 i 1 jako flagi prawdziwej/fałszywej, wtedy jeśli (zmienna $) lub jeśli (! $ Zmienna) działałaby, ale jeśli jest to wynik całkowity jak w strpos(), wpadniesz na problemy ... jeśli to możliwe, polecam używanie rzeczywistej wartości boolowskiej zamiast 0/1.

... może to pomoże wyjaśnić; skomentuj wariacje $ var, aby zobaczyć różne wyniki.

<?php 

$var = true; 
$var = 1; 

$var = false; 
$var = 0; 

if ($var) { 
    echo 'var = true <br />'; 
} 

if ($var === true) { 
    echo 'var is a boolean and = true'; 
} 

if (!$var) { 
    echo 'var = false <br />'; 
} 

if ($var === false) { 
    echo 'var is a boolean and = false'; 
} 
7

tylko fakt:

time php -r '$r = true; for($i = 0; $i < 10000000; $i++) { if($r == true) {} }'

time php -r '$r = true; for($i = 0; $i < 10000000; $i++) { if($r) {} }'

Drugi jest szybszy niż pierwszy.