![]() |
![]() |
![]()
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ź ![]() |
|
|
![]() |
![]()
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 ![]() -------------------- "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: 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.
|
|
|
![]()
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. |
|
|
![]()
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ą
![]() |
|
|
![]()
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:
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. |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Czy wy czytacie ze zrozumieniem?
|
|
|
![]()
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
![]() 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 |
|
|
![]()
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. |
|
|
![]()
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
![]() 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 ![]() 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 |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 520 Pomógł: 102 Dołączył: 15.07.2014 Skąd: NULL Ostrzeżenie: (0%) ![]() ![]() |
-- 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 ![]() 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 ![]() Ten post edytował KsaR 9.09.2016, 15:43:35 -------------------- |
|
|
![]()
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 ![]() 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 ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
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 ![]() |
|
|
![]()
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. -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 00:06 |