Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] rzutowanie typów i porównanie ciągów
ghost1511
post 18.11.2013, 14:35:36
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:

  1. var_dump( 'index.php' == 'panel_logowania.php' ); //false
  2. var_dump( (bool) 'index.php' == 'panel_logowania.php' ); //true
  3. var_dump( (bool) ('index.php' == 'panel_logowania.php') ); //false


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?
Go to the top of the page
+Quote Post
nospor
post 18.11.2013, 14:41:20
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

Go to the top of the page
+Quote Post
werdan
post 18.11.2013, 14:44:39
Post #3





Grupa: Zarejestrowani
Postów: 354
Pomógł: 100
Dołączył: 14.11.2013
Skąd: Płock

Ostrzeżenie: (0%)
-----


  1. var_dump( (bool)'index.php' == 'panel_logowania.php' );
  2. var_dump((bool)'index.php');
  3. var_dump(true == 'panel_logowania.php');
  4.  


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).
Go to the top of the page
+Quote Post
mstraczkowski
post 18.11.2013, 15:13:45
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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:13