Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Który zapis lepszy?
seweryn
post
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 24.08.2012

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


Cześć, mam wątpliwość odnośnie formy zapisu warunku if, który zapis będzie lepszy:

Pierwszy:
if ($var == 'jeden') {echo $var;}

Drugi:
if ('jeden' == $var) {echo $var;}

Czy jest jakaś różnica?

Z góry dzięki za odpowiedź smile.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Drugi zapis to Yoda style i mial zapobiegac takim sytacjom jak to, ze zamiast == wpiszesz = i zamiast porownac zmienisz zawartosc zmiennej.

Generalnie przyklad 1 jest bardziej logiczny w czytaniu, podczas gdy drugi juz tak logiczny nie jest - jak to Yoda wink.gif


--------------------

"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
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Poza tym na dobrą sprawę powinieneś niemal zawsze korzystać z operatora identyczności (===) przy porównywaniu, gdzie o pomyłkę z przypisaniem (=) jest już na prawdę ciężko.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


nie koniecznie.

Ja oczekuję wartości 3 i nie obchodzi mnie czy będzie to int, float czy string

Więc zależy od aplikacji i tego jak piszemy.
Go to the top of the page
+Quote Post
com
post
Post #5





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Pyton_000 tylko takie kwiatki można robić tylko php/javascript i może czymś tam jeszcze, bo na to pozwalają, ale dobry programista wie że jest to niezgodne ze sztuką wink.gif
Go to the top of the page
+Quote Post
lukaskolista
post
Post #6





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


@Python_000
Nie zgadzam się z tym, że oczekuję wartości i nie obchodzi mnie typ, bo właśnie typ jest tutaj istotny. Prosty przykład, że jednak typ ma znaczenie:

  1. function test(): float {
  2. return 1.0;
  3. }
  4.  
  5. var_dump('01' == test());

wynik operacji logicznej to true, co ewidentnie nie jest prawdą. Niestety php to taki podwórkowy język programowania, który na takie rzeczy pozwala.
Go to the top of the page
+Quote Post
Pyton_000
post
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Czy wy czytacie ze zrozumieniem?
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@lukaskolista ale Pyton mowil o sytuacji 1 == 1.0 co akurat w przypadku 1 === 1.0 nie zadzialala jak akurat bysmy tego chcieli. Nikt normalby nie porownuje '01' z 1.0 wink.gif

Prosty przyklad z zycia wziety. Jakis czas temu podkorcilo mnie by uzywac === zamiast ==. Wszystko pieknie dziala az tu po miesiacu dzwoni klient ze wyniki ma zle. 3 godziny szukalem bledu. Okazalo sie ze mialem w jednym miejscu if ($zm1 === $zm2) gdzie obie zmienne mialy byc docelowo liczbami calkowitymi ale nagle gdzies tam na klienckim etapie pod zmienna $zm2 zamiast (int)1 bylo (float)1. Liczby niby te same, ale przez === moje obliczenia szlag trafial. Takze w tym przypadku == jest jak najabrdziej ok. Trzeba sobie tylko zdawac sprawe z danych jakie miec bedziemy


--------------------

"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
lukaskolista
post
Post #9





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


Nikt normalny nie porównuje? A jaką masz pewność, że w parametrze metody dostaniesz 1 zamaist 01 zwłaszcza wtedy, gdy dane pochodzą od użytkownika?
Jasne, nikt normalny nie pisze takich prostych ifów, które nic nie robią, to był tylko przykład.
Go to the top of the page
+Quote Post
com
post
Post #10





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


nospor wszytko fajnie, tylko mówimy tu o php, który jest interpreterem i na takie coś pozwala, co żaden inny język nie przepuści bo int !== float, zresztą mamy php7 i tam też używając mechanizmów nowej składni, czegoś takiego nie przepuści przy zwracaniu danych z metody o określonym typie. Nie powinniśmy się ograniczać tylko do naszej platformy tylko dlatego iż ona na coś takiego pozwala. W twoim przykładzie znacznie lepszym rozwianiem było by rzutować to na float/int wedle potrzeby wink.gif

Właśnie takie przyzwyczajenia programistów, sprawiają, że na php jest tyle narzekania i nie jest on traktowany jako poważny język, a drugi problem to Wordpress biggrin.gif

Cytat
Ja oczekuję wartości 3 i nie obchodzi mnie czy będzie to int, float czy string


tylko ta wartość 3 zawsze jest liczbą całkowita i tak powinna być traktowana, tak samo 3.0 to float, a "3" powinna być stringiem.

ja wiem, że dla wygody można używać sobie ==, ale Crozin ma tu rację, że powinniśmy tego unikać

Ten post edytował com 9.09.2016, 15:25:06
Go to the top of the page
+Quote Post
KsaR
post
Post #11





Grupa: Zarejestrowani
Postów: 520
Pomógł: 102
Dołączył: 15.07.2014
Skąd: NULL

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


  1. <?php
  2.  
  3. if ('321e4' === '3210000') {
  4. echo "'321e4' === '3210000'\n";
  5. }
  6. if ('321e4' == '3210000') {
  7. echo "'321e4' == '3210000'\n"; # '321e4' == '3210000'
  8. }


--

Co do == vs ===, ja zawszę używam === chyba że nie mam wyboru bo np. jakaś biblioteka coś źle zwróci.

Co do Yoda Condition -
Kursy itp uczą $var == 'x'...
Więc generalnie będzie więcej zwolenników tego typu podstaw.

Ja od czasu do czasu wolę użyć 'x' === $var od $var === 'x', dla mnie to jest bardziej logiczne mimo że robi to samo.

Dodatkowo Yoda jak się nie mylę ułatwi sprawę porównania PHPowi i wykona się szybciej,
przez to że "PHP"(interpreter) z góry będzie znał typ przy ===.
Więc przy gigantycznych pętlach da zysk, w warunkach zwykłych nie bardzo
// Jak komuś się nudzi to gdzieś na stacku o tym było biggrin.gif

Ale jak chodzi o ogólne zastosowanie "$var='x' vs 'x'=$var / ($var == 'x')" to jak siedze około 4~ lata w php nigdy takiej wpadki nie miałem nawet przypadkiem biggrin.gif

Ten post edytował KsaR 9.09.2016, 15:43:35


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
A jaką masz pewność, że w parametrze metody dostaniesz 1 zamaist 01 zwłaszcza wtedy, gdy dane pochodzą od użytkownika?
W moim przypadku nie pochodzily wink.gif W moim przypadku wiedzialem ze bedzie liczba. Do glowy mi jednak nie przyszlo ze w pewnym momencie ta liczba zamieni sie na float z 1 na 1.0.
Owszem, mozna zawsze rzutowac, ale w pewnych sytuacjach po prostu lepiej uzyc ==.

I nie mam zamiaru z tego rezygnowac tylko dlatego ze java na to nie pozwala czy inny jezyk tongue.gif


--------------------

"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
com
post
Post #13





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


no tak i dochodzimy w tym momencie do punktu gdzie php zachowuje się nieoczekiwanie co jest przyczyną wielu błędów, dlatego bezpieczniej jest kontrolować typ a nie pozostawiać go php bo potem można sie tak przejechać jak u Ciebie

Akurat z problemem pomyłek, które ratowała yoda, dziś sobie IDE doskonale radzą, to pamięta czasy vima biggrin.gif
Go to the top of the page
+Quote Post
markonix
post
Post #14





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Przez lata nie doszło u mnie do sytuacji, że wróciłem do jakiegoś skryptu celem poprawienia i zmieniłem == na ===.
Czasem używam celowo np. żeby rozróżnić prawidłowo null od zera ale przy porównywaniu stringów/intów/floatów doceniam te ułatwienie.


--------------------
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 Aktualny czas: 21.08.2025 - 00:06