![]() |
![]() ![]() |
![]() |
![]()
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 559 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 ===
|
|
|
![]()
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 27.09.2025 - 22:57 |