![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 186 Pomógł: 18 Dołączył: 2.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
Natknąłem się dzisiaj na taką właściwość rzutowania typów:
Otóż drugi przypadek zwrócił mi TRUE, choć się tego nie spodziewałem. Dlaczego? Czyżby oba ciągi były rzutowane na bool i wtedy porównane? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
jesli porownujesz ze soba przez == dwa rozne typy, to jeden jest rzutowany na drugi. Jak niby inaczej ma porownac? Chccesz porownywac z typami to uzywaj ===
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 354 Pomógł: 100 Dołączył: 14.11.2013 Skąd: Płock Ostrzeżenie: (0%) ![]() ![]() |
When converting to boolean, the following values are considered FALSE: - the boolean FALSE itself - the integer 0 (zero) - the float 0.0 (zero) - the empty string, and the string "0" - an array with zero elements - an object with zero member variables (PHP 4 only) - the special type NULL (including unset variables) - SimpleXML objects created from empty tags Every other value is considered TRUE (including any resource). |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 273 Pomógł: 52 Dołączył: 3.02.2013 Skąd: Przemyśl Ostrzeżenie: (0%) ![]() ![]() |
W drugim przypadku nie rzutujesz całego wyrażenia na boolean, rzutujesz tylko pierwszy string (index.php).
Co w rzeczywistości daje ci porównanie true == panel_logowania.php Natomiast z kolei to wyrażenie skutkuje zwróceniem true, ponieważ string panel_logowania.php jest logiczną prawdą W trzecim przypadku rzutujesz wynik całego wyrażenia na boolean, co daje ci false Ponieważ index.php nie jest równy panel_logowania.php - już na tym etapie otrzymujesz czyste logiczne false. Więc twoje ponowne rzutowanie to nic innego niż (boolean)false Natomiast pierwszy przypadek jest analogiczny do trzeciego, z tym że nie rzutujesz wyniku wyrażenia Czyli nie wykonujesz tego zbędnego (boolean)false na końcu, o którym wcześniej wspominałem. Jeżeli zależy ci na porównywaniu typów zainteresuj się operatorem identyczności === Oprócz zwykłego porównywania wartości, sprawdza on także typy danych Więc, jeżeli użyjemy tego operatora do porównania true === 'string' otrzymamy false Ten post edytował mstraczkowski 18.11.2013, 15:22:53 -------------------- Jeżeli moja wypowiedź Ci pomogła użyj przycisku
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 11:13 |