Autor | Zpráva | ||
---|---|---|---|
jan99 Profil * |
#1 · Zasláno: 28. 6. 2012, 19:22:01 · Upravil/a: jan99
Ahoj, nevadi kdyz pridam napr. array s konfiguracnimi udaji rovnou do globals?
To same pokud pridam do $GLOBALS rovnou array s LANGUAGE texty pro celou sajtnu? Zajima me jestli to nebude mit napr spatny vliv na vykon PHP (language texty byvaji obsahlejsi). $GLOBALS['_conf_array'] = array('a','b','c'); function g(){ var_dump($GLOBALS['_conf']); } g(); Videl jsem ze nektere systemy pouzivaji pro globalni data Konstanty (define('KONST','ahoj <br/> hoj')), ale takove reseni se mi nelibí... Taktez se mi nechce neustale psat do kazde funkce global $_conf_array; aby tam ta array byla videt. Diky za nazory a pripominky * var_dump($GLOBALS['_conf_array']); |
||
AM_ Profil |
pokud nechceš použít statické třídy, tak je tohle asi nejlepší řešení.
Se statickou třídou by to mohlo vypadat nějak takto: <?php class Lang { private $data = array('hw'=>'Hello, World', 'welcome'=>'Welcome to my site.'); public static function text($id) { return $this->data[$id]; } } //viditelne globalne echo Lang::text('welcome'); Samozřejmě je to zjednodušené, v praxi se hodí např. mít jazyková data v souboru odděleném od této třídy a načíst je dle zvoleného jazyka apod... Já mám řešení přes třídy raději, ale je to spíš otázka vkusu, na výkon by to nemělo mít zásadní vliv. |
||
jan99 Profil * |
#3 · Zasláno: 2. 7. 2012, 00:50:06 · Upravil/a: jan99
AM_: to neni spatny napad s tema tridama. Diky za tip
premyslim jak to toho nacpat parse_ini_file(); funkci tak aby se ta array s nastavenim nacitala z toho. Kdyz to dam rovnou do te staticke fukce tak se to parse_ini_file() bude volat porad a porad znovu. A do konstruktoru to dat nemuzu protoze je to staticka funkce a nebude to fungovat.. (?) |
||
Keeehi Profil |
#4 · Zasláno: 2. 7. 2012, 11:08:51
jan99:
Udělat Lang s návrhem podobným singletonu. Ten konstruktor má a staticky se volá. |
||
Ugo Profil |
<?php class Lang { private static $data = array(); public static function load($array) { self::$data = (array)$array; } public static function loadFile($file) { if(file_exists($file)) { self::load(parse_ini_file($file)); } else { throw new Exception("Zadany soubor neexistuje"); } } public static function text($id) { if(isset(self::$data[$id])) { return self::$data[$id]; } else { return $id; } } } // tst define('LANGUAGES',__DIR__.'/res/languages'); try { Lang::loadFile(LANGUAGES.'/en.lang'); } catch(exception $e) { echo $e->getMessage(); } echo Lang::text('pes'); edit.. eh sem to zkopiroval a nechal i s tou chybou :D je to ošklive, polofunkční, ale nástřel jak bych to řešil já. jinak GLOBALS samozřejmě špatné neni $lang = new lang() v základnim prostoru je přece taky globals, výkonostně je asi nejlepší to globals, pak statická třída a někde daleko za tim instance, osobně jazyky řešim takovym hybridem abych moh mít zároveň víc načtenejch jazyků, ale pro případ jednoho sem nemusel nic řešit. + tady mam nějaké chybové stavy, to je podle mě blbost, soubor neexistuje? - vytvořim, neni záznam? .. vytvořim. přidám metodu save() a mam hotovou i administraci ;) |
||
jan99 Profil * |
#6 · Zasláno: 2. 7. 2012, 18:29:24
Ano, nejlepší to bude asi fakt do těch GLOBALS.
PS: proč potřebuješ mít načteno několik jazyků najednou? Podle mě je to zbytečné, když uživatel vidí jen jeden jazyk který má zrovna zvolený |
||
Časová prodleva: 12 let
|
0