ďťż

[PHP] Stałe czy zmienne? Duża ilość. Jaka różnica wydajności?

       

Podstrony


telcocafe

Szukałem w internecie, ale jakoś nie znalazłem tego co trzeba. Zastanawiam się co jest lepsze: stałe czy zmienne? Widziałem różne rozwiązania w systemach. Chodzi mi o zużywanie pamięci przy odczycie zmiennych czy skałych języka. Czy używając wielu (100-200) pozycji jest wydajniejsze dla zmiennych czy dla stałych?



Badałem kiedyś ich wydajność - prawie nie różni się, lecz zmienne wygrywają. Zużycia pamięci nie sprawdzałem - polecam: Xdebug i funkcje: xdebug_memory_usage() oraz xdebug_peak_memory_usage().

Do twoich potrzeb lepsze są zmienne lub tablice. :)

Tak, chodziło mi o stałe lub tablice.
Xdebug jest rozszerzeniem, a ja nie mam dostępu do desktopowego internetu i nie wiem kiedy będę miał . . . (Chyba że rozszerzenie jest w XAMPP-ie).
Więc chyba będę musiał trochę posiedzieć nad moim kodem :-D

najlepszym rozwiązaniem są imho zmienne globalne, które można wykorzystać wielokrotnie w zasadzie w każdej funkcji.
ale to tylko moje zdanie, więc się mną nie przejmuj.



Tak. W odróżnieniu od stałych, zmienne globalne nie są widziane w funkcjach; to kolejny problem. Czy jest jakiś inny sposób by funkcja widziała zmienną (poza użyciem global w funkcji)?


Tak. W odróżnieniu od stałych, zmienne globalne nie są widziane w funkcjach; to kolejny problem. Czy jest jakiś inny sposób by funkcja widziała zmienną (poza użyciem global w funkcji)?
wpisac ja do tablicy superglobalnej (np $_SESSION). oczywiscie to niekoniecznie ma sens, zalezy po co ci to.

A tablica $GLOBALS ?
http://pl.php.net/ma...ables.scope.php
Użytkownik DJ_ProG edytował ten post 24 styczeń 2008, 12:07
Jak można komuś polecać zmienne globalne, skoro nawet developerzy php odradzają ich stosowanie :S
Zależy od przeznaczenia. Jak chcesz zadeklarować np. gdzie jest główny katalog wykonywania skryptu - stałe. W większości wypadków stosuje się zmienne. Poza tym najlepszą zmienną jest obiekt.

Tak. W odróżnieniu od stałych, zmienne globalne nie są widziane w funkcjach; to kolejny problem. Czy jest jakiś inny sposób by funkcja widziała zmienną (poza użyciem global w funkcji)?
Bardzo prosty sposób:
class a { public $b; public function c ($d) { { echo $this->b+$d; } } $e = new a (); $e->b = 5; $e->c(5);
Naucz się nowoczesnego designu, nie ma sensu używanie jakichś przedwojennych metod typu $GLOBALS itp.


Jak można komuś polecać zmienne globalne, skoro nawet developerzy php odradzają ich stosowanie :S
Zależy od przeznaczenia. Jak chcesz zadeklarować np. gdzie jest główny katalog wykonywania skryptu - stałe. W większości wypadków stosuje się zmienne. Poza tym najlepszą zmienną jest obiekt.

Bardzo prosty sposób:
class a { public $b; public function c ($d) { { echo $this->b+$d; } } $e = new a (); $e->b = 5; $e->c(5);
Naucz się nowoczesnego designu, nie ma sensu używanie jakichś przedwojennych metod typu $GLOBALS itp.

Z $GLOBALS nie będę korzystał. Może pozostanę przy stałych. A potrzebne mi jest to do - jak już wspomniałem - pakietu języka. Dlatego właśnie Twoje zastosowanie odbiega od moich oczekiwań :-)

A co powiesz na to? :-) ma to tę zaletę, że przy niektórych językach (japoński na przykład) nie będzie problemu z kodowaniem - nie musisz polegać wyłącznie na tym co jest w jakiejś stałej, ale możesz to dodatkowo filtrować (przepuszczać przez jakiś mbstring, iconv itp - już na etapie odczytu/przypisania do zmiennej)
class Lang_PL { private $matrix = null; public function __construct () { $this->matrix = unserialize('some.file.txt'); } public function Get ($code) { return (string) $this->matrix->$code; } } $lang = new Lang_PL (); $title = $lang->Get('title'); $author = $lang->Get('author'); //itp ....
(oczywiście w __construct() musimy podać odpowiedni plik - zserializowanym obiektem typu $a->title = 'tytul'; itp)
Można też jeszcze łatwiej, np. echo $lang->title - poczytaj o magicznej metodzie __get() :)
Aaa, model singleton umożliwi "widzialność" wszystkich obiektów w każdym miejscu skryptu. Klasy które już zostały dołączone są widoczne w całym skrypcie, więc można ich używać w statyczny sposób (klasa::metoda()). Wiedząc to, można sprawić by klasa zwracała instancję samej siebie, niezależnie od tego gdzie jest nam potrzebny dostęp do owej.
Użytkownik Einzeinbleth edytował ten post 24 styczeń 2008, 18:43
Tak, też nad tym myślałem, tylko ze zwykłą funkcją i switchem (głupie bo powolne, ale pewnie bym wpadł na tablice :-P). Ale dobre rozwiązanie. Muszę się bardziej podszkolić w piątce :-)
Dzięki, Twoje rozwiązanie wydaje się najbardziej optymalne.
// Edytowano
Xdebug jest w XAMPP-ie, ale Apache się wiesza podczas uruchamiania. Chyba nie przetestuję niczego . . .
Użytkownik andrzej_aa edytował ten post 24 styczeń 2008, 21:44
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.