Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Ustawienia w jednym pliku
Forum PHP.pl > Forum > Przedszkole
Rysh
Witam, od pewnego czasu piszę aplikację w PHP i nadszedł czas kiedy chciałbym w niej zrobić porządki... Posłużę się przykładem:

Przepuśćmy mamy taką funkcję:
  1. <?php
  2. function dodaj_liczbe($liczba) {
  3. $liczba += 5;
  4. return $liczba;
  5. }
  6.  
  7. $xyz = 3;
  8. echo dodaj_liczbe($xyz);
  9.  
  10. ?>

Co chcę osiągnąć? Chciałbym wszystkie ustawienia przenieść do jednego pliku w którym miałbym wszystkie ustawienia np setting.php:
  1. <?php
  2. $setting = array(
  3. 'dodaj_liczbe' => 5,
  4. 'inne_ustawienie' => 2,
  5. );
  6. ?>

Aby kod ostatecznie wyglądał:
  1. <?php
  2. function dodaj_liczbe($liczba) {
  3. $liczba += $setting['dodaj_liczbe'];
  4. return $liczba;
  5. }
  6.  
  7. $xyz = 3;
  8. echo dodaj_liczbe($xyz);
  9.  
  10. ?>


Aby w przyszłości jeśli chciałbym zmienić jakieś ustawienia wystarczyło żebym zmienił w pliku setting.php zamiast szukać wszystkiego w kodzie.

Proszę o jakąś podpowiedz pod czym tego szukać. Dodam że zmienne globalne zostały wyłączone.
Pozdrawiam.
Wicepsik
include ?
qba10
To zależy jak masz stworzony kod...
Ja na przykład też tworzę aplikację w której mam mnóstwo takich ustawień i wszystkie trzymam w pliku ini.
Cała moja aplikacja składa się z głównej klasy, w której są wykonywane i wczytywane inne pliki i aplikacje. Plik ini prasuje w tej głównej klasie więc w innych plikach wykonywanych w tej klasie bez problemu mogę wykorzystać wszystkie ustawienia z pliku ini.

Nie wiem jak to będzie u ciebie wyglądało, ale możesz też wczytać ustawienia do sesji i z nich korzystać. Sesje są tablicami super globalnymi, wiec będziesz miał do nich dostęp wszędzie.
Rysh
Cytat(Wicepsik @ 13.02.2010, 23:55:56 ) *

Jeśli użyje include przed funkcją zmienna nie będzie widoczna w funkcji.

Przykład (ust.php):
  1. <?php $zmienna = array( 'dodaj' => 5, ); ?>

oraz test.php:
  1. <?php
  2. include("ust.php");
  3. function dodaj($liczba) {
  4. $liczba += $zmienna['dodaj'];
  5. return $liczba;
  6. }
  7. $abc = 8;
  8. echo dodaj($abc);
  9. ?>

test.php zwróci mi liczbę 8, a nie 13 (8+5).
Może nie do końca napisałem o co mi chodzi, mam około 30 funkcji i w większości mam jakieś ważne ustawienia, dlatego chciałbym w jakiś sposób załączyć raz plik z ustawieniami a następnie ich używać w każdej z funkcji.
Oczywiście istnieje wyjście używać w każdej funkcji include - jednak ja szukam innego wyjścia.
Istnieje funkcja global, ale chyba nie spełni moich oczekiwań.

Do $_SESSION również nie chcę tego wczytywać za dużo tych ustawień jest.
Pilsener
Powszechnie przyjęta praktyka to pliki .ini i .cfg, jeśli musisz trzymać ustawienia w pliku .php (by nikt tego nie mógł pobrać) to najlepiej w postaci tablicy zserializowanej.

Jeśli chcesz zmiennych dostępnych w całym skrypcie to używaj tablic superglobalnych lub wprowadzaj tablicę ustawień do każdej funkcji jako parametr.
wookieb
Zainteresuj się klasami statycznymi.
Przykład
  1.  
  2. class Settings
  3. {
  4. private static $settings = array();
  5.  
  6. public static function load()
  7. {
  8. // tutaj ladujesz ustawienia do self::$settings;
  9. }
  10.  
  11. public static function dodaj($cos)
  12. {
  13. return self::$settings['liczba'] + $cos;
  14. }
  15. }
  16.  
Rysh
Dzięki wookieb.
W takim razie czas rozpocząć przygodę z klasami i obiektami (tego się obawiałem smile.gif ).

Pozdrawiam.
gothye
dlatego nie widać zmiennej w funkcji ponieważ jest zadeklarowana przednią ,chcąc się do niej odwołać wewnątrz funkcji musisz użyć global;

  1. funkcja jakaś()
  2.  
  3. {
  4.  
  5.     global $zmienna ;
  6.  
  7.     echo $zmienna ;
  8.  
  9. }
  10.  


altruista2
Plik ustawienia.php:
  1. $GLOBALS['ustawienia'] = Array(
  2. 'liczba' => 34,
  3. 'inna' => 22,
  4. 'tekst' => 'forum php'
  5. );


Plik PHP:
  1. include('ustawienia.php');
  2.  
  3. function dodaj($x) {
  4. return $GLOBALS['ustawienia']['liczba'] + $x;
  5. }
  6.  
  7. echo 'Wynik = '.dodaj(4);

wynik:
Cytat
Wynik = 38
Pilsener
Tylko nie global wewnątrz funkcji! To bardzo zła praktyka i prędzej czy później zniknie z PHP. Po to są tablice superglobalne i tablice jako parametr funkcji + oczywiście obiektówka, by nie trzeba było tego robić. Inaczej Twoja funkcja niczym się nie różni od kawałka zaincludowanego kodu, czy zatem możemy wtedy jeszcze mówić o funkcji? Nie róbmy bałaganu w kodzie, gdy przerabiam jakiś kod i widzę pełno global to mnie mdli.
altruista2
@up: też mnie mdli na ten widok... Pracuję na etat w dużym sklepie komputerowym, mój poprzednik który zrobił stronę, miał nawyki do:
  1. function funkcja() {
  2. global $x;
  3. global $y;
  4. global $z;
  5. global $bog_wie_co;
  6. }
  7.  
  8. $bog_wie_co = 34;
  9. $x = 2;
  10. $z = 66;
  11. funkcja();

I jeszcze zapytania mysql typu:
  1. mysql_query("SELECT * FROM Tablica WHERE ID=".$_POST['ID'])

I jeszcze to:
  1. global $search;
  2. echo 'Szukasz '.$search;

Pracuję już w tej firmie około 3 miesiące i do dziś nie dałem rady wyłapać wszystkich tych "smaczków"
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.