ugrás a tartalomhoz

Mikor konstans, mikor változó?

kalamona · 2006. Szep. 18. (H), 11.59
Sziasztok!

- Mikor használ a jó programozó állandókat és mikor változókat?
- Melyik gyorsabb?
- Melyik jobb memóriaszempontból?

Tudom, hogy az egyiket lehet változtatgatni, a másikat nem arra találták ki, de most az a szitu hogy elkezdtem konstansokat használni az alkalmazásom fejlesztése során, és egyre jobban szaporodnak. :)
Nekem odalett a biztonságérzetem, elkezdett az járni a fejemben, hogy valamit rosszul csinálok. Főleg, mert amikor nézegettem komolyabb projektek forrásait, ott kevesebbet láttam belőlük. Attól tartok rontani fogják a sebességet, vagy a memóriakihasználást. Pedig olyan adatok amiket nem nagyon kell változtatni, tehát lehetnek állandókként deklarálva.


Mondjatok valami okosat.
 
1

én úgy hiszem

TeeCee · 2006. Szep. 18. (H), 18.22
hogy a konstansot a nem változó adatok esetében szokás alkalmazni, illetve ami előnye még van, hogy nem kell global-ozni a függvényeken belül, egyből eléred őket, hasonlatosan a szuperglobális változókhoz.
Ha már itt tartunk, én a $GLOBALS['settings'] tömböt használom a rendszerem beállításainak tárolására használni. Azt sem kell globalozni, hiszen ez szuperglobális (legalábbis a $GLOBALS), igaz, annyi hátránya van, hogy a PHP IDE-k a konstansokat felajánlják kiegészítésre, ellenben a $GLOBALS['settings']['guestbook']['numPostsPerPage'] értéket azt 'természetesen' nem. Mindazonáltal én jobbnak látom szervezés szempontjából egy tömb elemeiként megadni az értékeket, mint pl egy csomó SETTINGS_GUESTBOOK_NUMPOSTSPERPAGE és hasonló konstansokat definiálni, többekközött az olvashatóságot is szem előtt tartva (kis/nagybetűk) - perszepersze tudom, a konstansoknak is lehet megadni kisbetűt, csak ugye azt nagyon nem szokás a félreértések elkerülése végett...
(Egyébiránt így könnyen leellenőrizhetem a vendégkönyvem beállításait, hiszen a $GLOBALS['settings']['guestbook'] pont ezeket tartalmazza)

Memóriában nem hiszem, hogy gondot okozna, amikor elkeztdem PHPzni, akkor volt egy majdnem kétezer soros konfigfájlom, akkor még síma változóba raktam az értékeket :) az is elég gyors volt, nem volt gond a memóriával sem (Intel akkor 166MMX 128Mbyte, most meg egy P4 3Ghz, 1Gb RAM szerveren persze nagy a szám :D )
A mostani $GLOBALS['settings']-es configfájlom 300 sor körül mozog, ez nem okozhat gondot...
Vagy lényegesen nagyobb mennyiségű adatra számítasz?
2

egyéb

breakline · 2006. Szep. 18. (H), 18.38
lehet hülyeség, de én osztályba rakok mindent, mondjuk legyen akkor globals osztály, és beteszem az "includes.php" fileba (az meg olyan file, amiben azok a file-ok vannak include-olva, amik minden fileban kellenek, ez minden projektben megvan) h $globals = new globals; és akkor nem kell a névterekkel bajlódni, meg persze minden egy helyen lesz.
És akkor a konkrét php-fileban meg tudom használni az $globals->valtozo formát, ez majdnem ugyanaz, mintha a beépített tömböt használnád
3

sztem nem hülyeség :))

toxin · 2006. Szep. 18. (H), 18.46
csak én tömbbe raktam $env - névvel a nagy $_ENV mintájára, a többi mint nálad


üdv t
4

attól függ

Szekeres Gergő · 2006. Szep. 18. (H), 21.11
Ez attól függ mit akarsz csinálni.

Ha például baromi hosszú karaktersztringeid vannak, amit nem változtatsz a program futása során, sokkal ésszerübb konstansba tárolni. Például a labeleket, fejléceket.

Globális változót én sosem használok, szerintem csak keveredésre ad okot. Ha kell, akkor global $var ozok inkább... Amúgy pedig lokális változokkal és returnokkal próbálok dolgoni.

Valamint ha nincs htaccessed, akkor konstansokkal szoktál levédeni a fájlokat direkt elérés ellen.