Wpis z mikrobloga

Porozmawiajmy o superglobalach. Używać czy nie? Dlaczego? Wiem, że zmienne globalne zawsze i wszędzie uznawane są za zło, ale czy jest jakiś powód do unikania odwołań do $_POST i innych w kodzie? Mając przed sobą dwie opcje - utworzenie wrappera na GETa, oraz po prostu odczytanie jego zmiennych, ostatnie wydaje mi się łatwiejsze i szybsze.
#php #webdev #filozofiaprogramowania
  • 30
Szczerze to chyba zależy od tego, co chcesz zrobić. Robiąc zlecenie na 1-2 wieczory robię nieraz takie spaghetti, że nie chciałbym nikomu tego pokazywać, ale tu nie o to chodzi :)

Natomiast biorąc pod uwagę, że nawet microframeworki (myślę np. o sileksie, lumenie, slimie) mają jakiś wrapper na odbierane dane - to świadczy o tym, że większość postrzega to jako rozsądniejsze, w konkretne powody się nie zagłębiam, a co powiedział @Lipathor to
@HalEmmerich: Pewnie tak. Np. może się okazać, że zmieniasz metodę z GET na POST. Albo chcesz wykorzystać ten sam kawałek kodu w GET i POST. Jeśli bezpośrednio odwolujesz się do zawartości $_GET to musisz skopiować kod.
Co więcej - nie masz gwarancji, że np. obie metody wywołały taką samą walidację danych wejściowych.
Możliwe, że np. wykonujesz kod w konsoli w ramach jakiegoś unit testu. Nie masz tam wypełnionych $GET i
@Ginden: Jeśli zmienię z GET na POST, to używając wrapperów nie będę musiał zmienić w kodzie tyle samo? Zawsze mogę zrobić na wstępie:

$data=$_GET; if(isset($_POST)) $data=$_POST;
O unit testach może nie będę się wypowiadał, bo głupio mi się przyznawać... ʕʔ
@Larin: Jeśli odprawię egzorcyzmy na danych, nie jest mi obojętne czy użytkownik wysłał posta, geta czy oba po części? Strona działa, a i żadnego większego zagrożenia bezpieczeństwa chyba nie ma. Czy rozchodzi się tylko o przenośność kodu?
Uważam, że jeżeli dobrze to spreparujesz, to jest ok - kwestia właśnie przenośności kodu o której mówił @Ginden, i też po prostu tego jak ten kod wygląda.
Zgadzam się, że fajnie jeśli PHP jest "the right way", ale jak mówiłem od samego początku - zależy co robisz. Jeżeli tego nawet nie unitujesz... to dobierzmy narzędzia do zadania ;)
#filozofiaprogramowania


@HalEmmerich: Raczej #naukaprogramowania

1. Globale utrudniają śledzenie kodu – szukaj później czy ktoś Ci się nagle do nich w losowym momencie nie odwołuje – albo tym bardziej czy gdzieś Ci ich po cichu nie modyfikuje.
2. Globale uniemożliwiają robienie podrequestów – takie Symfony potrafi np symulować żądanie do jakiejś strony, żeby uprościć flow aplikacji.
3. Globale utrudniają/uniemożliwiają automatyczne testowanie kodu (TDD)
4. Jest gazylion gotowego kodu, którego użycie eliminuje powyższe
@MacDada: Ad. 1. Jeśli piszę sam, to raczej wiem co i w którym miejscu robię.
Ad. 2. To akurat brzmi ciekawie.
Ad. 4. Jest dużo gotowców, które każdy może używać, ale najpierw wolałbym wiedzieć jak i dlaczego działają tak, a nie inaczej.
#filozofiaprogramowania a nie #naukaprogramowania, bo pośrednio wpis był pytaniem "czy małe, nieprzenośne strony robione przez jedną osobę, wykorzystywane w jednym miejscu są złe".
@Jurigag: Postawione i skonfigurowane wiele lat temu, okazjonalne aktualizacje niczego nie zepsuły. No i łatwo się uruchamia na windowsie. Ale na serwerze mam nginx i fpm.
No i modrewrite bez grzebania w configu.
Ad. 1. Jeśli piszę sam, to raczej wiem co i w którym miejscu robię.


@HalEmmerich: Pogadamy jak Twój kod będzie miał więcej niż 100kloc lub jak będziesz chciał wrócić do tego kodu za rok. Jak już nic nie będziesz pamiętał ;-)

Ad. 2. To akurat brzmi ciekawie.


automatyczne testowanie kodu (TDD) – to jest ciekawsze, serio, profesjonalizm wymaga, żeby móc powiedzieć „tak ten kod działa”, a nie tylko „wczoraj przeklikałem się