Czy w PHP należy używać operatorów porównania potrójnie równa się (===) zamiast podwójnej równości (==), chyba że istnieje szczególny powód, aby używać tego drugiego?


Najlepsza odpowiedź

Oczywiście!

W PHP, Javascript lub jakimkolwiek innym języku, który oferuje zarówno luźną, jak i ścisłą kontrolę równoważności, najlepiej jest używać wersji ścisłej, chyba że masz istotny powód, aby postąpić inaczej . (W rzeczywistości niektórzy programiści nalegają, aby w ogóle nie używać luźnych sprawdzeń równości!) Jest tego wiele powodów.

Po pierwsze, używanie luźnej równoważności może prowadzić do całej klasy defektów. można tego uniknąć dzięki ścisłej równoważności. Chociaż PHP jest szczególnie znane z bycia „pomocnym”, większość języków z dynamicznym pisaniem jest łagodna, jeśli chodzi o konwersję między typami. Dane, które przekazują luźną równoważność, mogą w wielu przypadkach zachowywać się dobrze i zagłębiać się w kod przed wywołaniem błędu lub nieoczekiwanym efektem ubocznym. Tymczasem ścisłe kontrole równoważności są bardziej zbliżone do typów kontroli, które występują w językach z typami statycznymi; znacznie mniej prawdopodobne jest, że dane w nieprawidłowym formacie zostaną uruchomione w amoku.

Podobnym problemem jest to, jak luźna równoważność utrudnia rozumowanie kodu. Jeśli używasz ścisłej równoważności, możesz poczynić wiele założeń dotyczących danych, które przejdą kontrolę. To samo nie jest prawdą, jeśli używasz luźnej równoważności. Rozważ dwa poniższe przykłady.

// Example #1: strict

if ( $i === 1 ) {

doThing( $i );

}

// Example #2: loose

if ( $i == 1 ) {

doThing( $i );

}

W pierwszym przykładzie możemy założyć, że funkcja „doThing” jest wywoływana z wartością liczbową i wystarczy rozważyć, jak ta funkcja będzie obsługiwać liczby.

Jednak w drugim przykładzie „doThing” może zostać wywołane z różnymi typami, w tym z ciągami znaków lub wartościami logicznymi. Czytając funkcję „doThing”, należy wziąć pod uwagę, jak każdy typ może być obsługiwany, w tym wszystkie różne (a czasem bezsensowne) reguły dotyczące niejawnych konwersji typów. To dużo do zapamiętania w twojej głowie!

Ponadto, używając luźnej równoważności, nie mówisz wprost. To nie tylko utrudnia wnioskowanie za pomocą logiki, ale także nie pozwala uchwycić faktycznych wymagań, które logika ma przedstawiać. W przykładzie nr 2 z powyższego nie ma sposobu, aby stwierdzić, czy pierwotny programista spodziewał się wartości liczbowych, łańcuchowych, wartości logicznych lub ich kombinacji. To sprawia, że ​​utrzymanie kodu jest kłopotliwe.

Wreszcie, chociaż niejawne rzutowanie typów może być wygodne, nie ma takiej potrzeby w profesjonalnym otoczeniu. Zawsze możesz ustawić rozsądne wartości domyślne lub ręcznie przekształcić dane do odpowiedniego typu. Może to wymagać więcej kodu i większego wysiłku, ale także znacznie zwiększa niezawodność twojego kodu.

Odpowiedź

Jeśli wiesz, że dwie wartości powinny mieć ten sam typ, wtedy tak, użyj Strict ( ===) za luźne (==). Strict ma lepszą wydajność, ponieważ nie musi wykonywać konwersji typu jak loose.

Na przykład 1 == „1” zwraca prawdę, ponieważ ten ciąg jest konwertowany na liczbę w celu sprawdzenia równości.

Podczas gdy 1 === „1” zwraca fałsz

Ścisła równość prawie oznacza, że ​​„nie jest tego samego typu? FALSE ”

Mam nadzieję, że to pomoże

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *