• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Plik konfiguracyjny

VPS Starter Arubacloud
0 głosów
379 wizyt
pytanie zadane 6 października 2017 w PHP przez kevin Mądrala (5,010 p.)

Witam!

Czy zmienne suerglobalne $GLOBALS są widziane we wszystkich plikach .php ? Czy aby tak było muszę includować osobny plik z zmiennymi konfiguracyjnymi ? Mam na stronie kilka rzeczy które działają tylko dla testu strony, po wrzuceniu strony na serwer nie chcę żeby użytkownik widział logi jakieś moje własne komunikaty ale nie chcę też za każdym razem komentować kodu po sprawdzeniu jego poprawności. Przykład: zakładamy nowe konto na stronie i aby aktywować konto trzeba kliknąć w link i chyba dla sprawdzenia działania rejestracji i skryptu aktywacji konta za każdym razem nie będziemy wysyłać sobie e-maila tylko przekażemy wygenerowany link do podstrony informującej o udanej aktywacji konta z dopiskiem // for debug a wysyłanie e-maila testujemy osobno. Rozwiązanie to wrzucenie tego do sesji albo osobny plik z konfiguracjami.

1 odpowiedź

0 głosów
odpowiedź 6 października 2017 przez xandros Nałogowiec (29,450 p.)

> Czy zmienne suerglobalne $GLOBALS są widziane we wszystkich plikach .php? 

Tak

> Czy aby tak było muszę includować osobny plik z zmiennymi konfiguracyjnymi? 

? Za kazdym razem, gdy użytwonik pyta serwer, musisz ustawić $GLOBALS... 

> Mam na stronie kilka rzeczy które działają tylko dla testu strony, 

Po to są testy. Wrzuć je w osobny plik i nigdy ich nie wrzucaj na serwer produkcyjny

 

Pare rzeczy:

  • Nie używaj zmiennych globalnych. Stwórz jakiś kontener z ustawieniami i przekazuj go dalej do aplikacji. Ewentualnie singleton... ale becareful, bo to jedynie mniejsze zło.
  • Jeśli boisz się, że mogą wyniknąć jakieś błędy, możesz logować takie rzeczy. Tylko ty będziesz miał dostęp do logów.
  • W ustawieniach wrzuć zmienna DEBUG. Ta zmienna jedynie w czasie pisania kodu może być ustawiona na true. Nigdy na produkcji u klienta. Na jej podstawie sprawdzasz, czy ma w danym czasie dodawać dodatkowe logi debuga, czy ułatwiać komunikacje z programem programiście.

PS Przeczytaj swoje pytanie na głos i popraw błędy. Ciężko się to czyta.

komentarz 6 października 2017 przez kevin Mądrala (5,010 p.)
Dlaczego tak unikać globali ? Dlaczego koniecznie wyrzucić to z finalnej produkcji ?
komentarz 6 października 2017 przez xandros Nałogowiec (29,450 p.)

 Dlaczego koniecznie wyrzucić to z finalnej produkcji ?

nie chcę żeby użytkownik widział logi jakieś moje własne komunikaty

 Simple?

Dlaczego tak unikać globali ?

Bo nie masz kontroli, co tam jest i kiedy zostało zmienione. Gdzieś w odmentach coś zmienia ci jednego globala i pozniej poświecasz tydzień, by dojść, dlaczego ci aplikacja nie działa.

do poczytania: http://wiki.c2.com/?GlobalVariablesAreBad

 

komentarz 6 października 2017 przez kevin Mądrala (5,010 p.)

Chyba za małą stronę piszę żeby to jeszcze zrozumieć... Ale tak na przyszłość. Mam klasę XX która wczytuje z bazy pewne dane. Obiekt tej klasy tworzę jako globalny ( nie jako $GLOBALS etc. ale $obiekt = new XX() poza funkcjami zaraz po <?php )ale nigdy w funkcji nie używam global xx; Zawszę jak chcę się odwołać do tego obiektu to przekazuję go w argumencie funkcji. Nie chcę aby ten obiekt istniał dla innych podstron. To jest to złe podejście ? W jaki sposób powinno być to rozwiązane ?

komentarz 6 października 2017 przez xandros Nałogowiec (29,450 p.)

Chyba za małą stronę piszę żeby to jeszcze zrozumieć... 

Nope. Uwierz nam, że im więcej będziesz programował, tym szybciej zrozumiesz, dlaczego nie powinno się użwyać zmiennych globalnych. 

Co do reszty: 

Obiekt tej klasy tworzę jako globalny

No powiedzmy.  

Zawszę jak chcę się odwołać do tego obiektu to przekazuję go w argumencie funkcji.

Dokładnie tak.

 Nie chcę aby ten obiekt istniał dla innych podstron.

Tak naprawdę nie chcesz, by te "podstrony" mogły go jakkolwiek zmienić. 
Pod hasłem "podstrona" mam na myśli różne części aplikacji. Bo może być to funkcja, która miała za zadanie przewalidować zuploadowany plik, a tak naprawde zmieniła dane logowania do bazy :>

 W jaki sposób powinno być to rozwiązane ?

Pokaże inne rozwiązanie, tylko by je zrozumieć, musisz przeczytać to

Mamy sobie microframework slim: https://www.slimframework.com/

W frameworku mamy coś takiego, co nazywa się DI (dependency-injection):
https://www.slimframework.com/docs/objects/application.html#application-configuration

W zadeklarowanej anonimowej funkcji możemy odwołać się do $this->get('nazwa'), gdyż są zbindowane z klasą kontenera. Kontener nie ma dostępu do tych funkcji, ale te funkcje maja dostęp do kontenera. Oczywiście kontener ma zablokowane nadpisywanie tychże parametrów, więc możemy jedynie pobierać argumenty.

Dodatkowo dzięki Interop/Container żaden z elementów kontenera nie będzie się inicjalizował więcej niż jeden raz.

TLDR: Moją propozycją jest ustawienie takiego kontenera, którego parametry możesz zadeklarować jedynie raz.

 

PS przed znakiem '?' nie stawiamy spacji.

komentarz 6 października 2017 przez kevin Mądrala (5,010 p.)

Czyli ten kontener to takie coś w czym przechowuję zmienne globalne ale odwołuję się do tych zmiennych poprzez ->get. Co do podstron to chodzi mi o różne pliki index.php pomoc.php etc. a nie komponenty na tej samej stronie. Nie jestem tylko pewny czy dla jednej zmiennej warto iść w tym kierunku ?

komentarz 6 października 2017 przez xandros Nałogowiec (29,450 p.)

Hmm, a czy ta zmienna może być stałą?

jak tak, to rzuć w bootstrapie/pliku inicjalizujacym:

defined('STALA') || define('STALA', 'WARTOSC');

http://php.net/manual/en/function.defined.php

http://php.net/manual/en/function.define.php

Podobne pytania

0 głosów
1 odpowiedź 290 wizyt
pytanie zadane 14 grudnia 2017 w PHP przez Q_Nick Mądrala (5,010 p.)
0 głosów
0 odpowiedzi 60 wizyt
pytanie zadane 19 marca 2020 w Systemy operacyjne, programy przez SimiVoid Pasjonat (19,790 p.)
0 głosów
1 odpowiedź 122 wizyt
pytanie zadane 20 stycznia 2019 w SQL, bazy danych przez xsior Nowicjusz (120 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...